Swift 3 中的协议扩展
Protocol extension in Swift 3
我想要 UIImageView
的默认 属性,即 isFlipped
。我可以通过子类化 UIImageView
并添加一个 属性 isFlipped
来做到这一点。
但是我想为此使用用户协议和扩展,但一段时间后它崩溃了。下面是我的代码。我怎样才能以正确的方式使用它?谢谢
import Foundation
import UIKit
protocol FlipImage {
var isFlipped: Bool { get set }
}
extension UIImageView:FlipImage{
var isFlipped: Bool {
get {
return self.isFlipped
}
set {
self.isFlipped = newValue
}
}
}
正如 Martin R 所说,您不能通过 class 扩展将存储的属性添加到 class。但是您可以使用 objective C 关联对象通过扩展
private var key: Void?
extension UIImageView {
public var isFlipped: Bool? {
get {
return objc_getAssociatedObject(self, &key) as? Bool
}
set {
objc_setAssociatedObject(self,
&key, newValue,
.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
我想要 UIImageView
的默认 属性,即 isFlipped
。我可以通过子类化 UIImageView
并添加一个 属性 isFlipped
来做到这一点。
但是我想为此使用用户协议和扩展,但一段时间后它崩溃了。下面是我的代码。我怎样才能以正确的方式使用它?谢谢
import Foundation
import UIKit
protocol FlipImage {
var isFlipped: Bool { get set }
}
extension UIImageView:FlipImage{
var isFlipped: Bool {
get {
return self.isFlipped
}
set {
self.isFlipped = newValue
}
}
}
正如 Martin R 所说,您不能通过 class 扩展将存储的属性添加到 class。但是您可以使用 objective C 关联对象通过扩展
private var key: Void?
extension UIImageView {
public var isFlipped: Bool? {
get {
return objc_getAssociatedObject(self, &key) as? Bool
}
set {
objc_setAssociatedObject(self,
&key, newValue,
.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}