ios - 无法分配给协议(protocol)中的属性 - Swift 编译器错误

标签 ios swift

我用 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 }
}

我认为,这个解决方案更适合这种情况。因为除非 nameableclass 的实例,否则 nameNameable 是无用的。

关于ios - 无法分配给协议(protocol)中的属性 - Swift 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436756/

相关文章:

ios - 通过一个容器 View 传递多个 View Controller - Xcode 8,Swift 3

swift - 为什么我可以在没有框架引用的情况下使用 MessageUI?

iOS 11 - 针对自定义 View Controller 未加载的建议 - 崩溃

ios - 对容器 View 约束集合使用 activateConstraints 时出错

ios - 我们可以使用 Twilio iOS SDK 进行 VOIP 推送通知吗?

ios - 检测何时触摸 Touch ID,无需身份验证

swift - 在 SwiftEntryKit 中按下条目按钮后执行操作

ios - 大多数时候 HTML 不会第一次加载

iphone - 如何使这个 CoreMotion 代码在视网膜 iPod touch 设备上工作?

ios - 基于 customObject 属性订购 Collection View 单元格 - Swift 4 -Xcode 9