Расширение протокола в Свифт 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
}
}
}
1 ответ
Решение
Как сказал Мартин Р., вы не можете добавлять сохраненные свойства в класс через расширения класса. Но вы можете использовать объект 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)
}
}
}