Расширьте UIView новыми свойствами - PullRequest
0 голосов
/ 19 сентября 2018

В моем приложении мне нужно добавить к куче UIKit объектов некоторые свойства;Первоначально я думал создать подкласс каждого необходимого элемента и создать свойства внутри нового класса, но я понял, что это значит написать новый класс для каждого типа элемента пользовательского интерфейса, который я использую.

В моемВ конкретном случае я хочу добавить к некоторым различным представлениям, таким как UIImageView и UILabel.Два свойства с именами initial position и final position типа CGRect для хранения начального и конечного позитина для использования его внутри метода, который переводит эти представления

Есть ли способ выполнить это без создания лотовклассов?

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете сделать следующее:

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
...