Swift 3中的协议扩展 [英] Protocol extension in Swift 3
本文介绍了Swift 3中的协议扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想要一个默认属性UIImageView
,它将是isFlipped
.我可以通过将UIImageView
子类化并添加一个属性isFlipped
来做到这一点.
但是我想为此使用用户协议和扩展名,但是一段时间后它崩溃了.下面是我的代码.如何正确使用它?谢谢
I want to have a default property of UIImageView
, which would be isFlipped
. I am able to do it by subclassing UIImageView
and adding one property isFlipped
.
But I want to user protocol and extensions for this , but it is crashing after sometime. Below is my code. How can I use it in right way? Thanks
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所说,您不能通过类扩展将存储的属性添加到类中.但是您可以使用目标C关联对象通过扩展来实现
As Martin R said you can't add stored properties to a class through class extensions. But you can use the objective C associated objects to do it via an extension
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)
}
}
}
这篇关于Swift 3中的协议扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文