我用 Swift 中的以下代码将我的头撞在墙上。我定义了一个简单的协议(protocol):
protocol Nameable {
var name : String { get set }
}
并通过以下方式实现:
class NameableImpl : Nameable {
var name : String = ""
}
然后我在另一个文件中有以下方法(不要问我为什么):
func nameNameable( nameable: Nameable, name: String ) {
nameable.name = name
}
问题是编译器对此方法中的属性赋值给出以下错误:
cannot assign to 'name' in 'nameable'
我看不出我做错了什么...以下代码可以正常编译:
var nameable : Nameable = NameableImpl()
nameable.name = "John"
我确信这是我忽略的一些简单的事情 - 我做错了什么?
最佳答案
@matt 的回答是正确的。
另一个解决方案是将 Nameable
声明为 class
only protocol .
protocol Nameable: class {
// ^^^^^^^
var name : String { get set }
}
我认为,这个解决方案更适合这种情况。因为除非 nameable
是 class
的实例,否则 nameNameable
是无用的。
关于ios - 无法分配给协议(protocol)中的属性 - Swift 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436756/