Car*_*kis 0 let swift swift-protocols
我有一个这样的代码(在操场上玩:
protocol ServiceProtocol {
var enabled: Bool { get set }
}
class Service: ServiceProtocol {
var enabled: Bool = false
}
class A {
let service = Service()
}
class B {
let service: ServiceProtocol = Service()
}
let a = A()
let b = B()
a.service.enabled = false
b.service.enabled = false // <-- the error is here: Cannot assign to property: 'service' is a 'let' constant
Run Code Online (Sandbox Code Playgroud)
如果我引用service为Service(class A),则一切都按预期进行。在 class 中B,service作为 a ServiceProtocol,我有错误:
无法分配给属性:'service' 是一个 'let' 常量
这对我来说是无稽之谈,因为我不想分配任何东西给service:我只是想分配service. enabled是get set,我应该能够分配它,就像在A.
如果我声明service为 a varin class B,错误就会消失。
有任何想法吗?
这是因为类、结构和枚举可以实现您的协议,因此编译器不知道它是引用类型还是值类型。您可以将您的协议限制为仅用于类并且您的代码将起作用
protocol ServiceProtocol: AnyObject {
var enabled: Bool { get set }
}
Run Code Online (Sandbox Code Playgroud)
现在
b.service.enabled = false
Run Code Online (Sandbox Code Playgroud)
编译正常
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |