![](/img/trans.png)
[英]Inheritance of UIView for adding new logic or extend UIViewController
[英]Extend UIView with new properties
在我的應用程序中,我需要向一堆UIKit
對象添加一些屬性。 我最初的想法是為我需要的每個元素創建一個子類,並在新類中創建屬性,但是我意識到這意味着為我正在使用的每種UI元素類型編寫一個新類。
在我的特定情況下,我想添加一些不同的視圖,例如UIImageView
和UILabel
。 兩個屬性,稱為CGRect
類型的initial position
和final position
,用於存儲初始和最終位置,以便在翻譯此視圖的方法中使用它
有什么方法可以在不創建很多類的情況下完成此任務?
您可以執行以下操作:
protocol Position {
var initialPosition: Int { get set }
}
不能僅在擴展中聲明屬性,因此您需要設置get
和set
。 您可以只關聯一個值:
private var initialPositionKey: UInt = 0
extension Position {
var initialPosition: Int {
get {
return objc_getAssociatedObject(self, &initialPositionKey) as! Int
}
set {
objc_setAssociatedObject(self, &initialPositionKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
}
然后,您可以像這樣擴展UIView
:
extension UIView: Position {}
和以下作品:
var view = UIView()
view.initialPosition = 5
print (view.initialPosition) // 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.