因此,我想将面向协议的编程范式与 OOP 结合使用,将一些变量分配给主类,比如 UIView、UIImageView 等,然后在它们的子类中定义一些其他变量。为了实现这一点,需要将这些变量设为“可选”,而 Swift 的一种方法是扩展协议。一切都很好,直到我决定将这些子类实例添加到数组并稍后读取这些变量......这是同一个对象(相同的指针)但是在添加到数组后读取该变量时,它使用来自协议扩展的 getter不是来自子类的那个。
protocol SomeProtocol {
var foo: String { get }
var foo2: String { get }
}
extension SomeProtocol {
var foo2: String {
return "value from extension"
}
}
extension UIView: SomeProtocol {
var foo: String {
return "value from UIView"
}
}
class SomeView: UIView {
var foo2: String {
return "value from someView"
}
}
let someView = SomeView()
print(someView.foo2)
“来自 someView 的价值”
var array = [SomeProtocol]()
array.append(someView)
print(array.first?.foo2)
“来自扩展的价值”
我知道这是一个符合的对象数组,SomeProtocol
这可能是一个原因。问题是我想要一个符合该协议的不同类的对象数组,并且能够从那些对象而不是协议扩展访问getter。@objc
如果我使用协议和变量,这可能是可能的,optional
但我更愿意使用纯 Swift 解决方案。