Я хочу создать копию UIView, а также скопировать дополнительную переменную, используя расширения.
Чтобы скопировать UIView, который я использую: (из Создать копию UIView в Swift )
extension UIView
{
func copyView<T: UIView>() -> T {
return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self)) as! T
}
}
Чтобы добавить переменную в UIView, я использую:
https://marcosantadev.com/stored-properties-swift-extensions/
extension PropertyStoring {
func getAssociatedObject(_ key: UnsafeRawPointer!, defaultValue: T) -> T {
guard let value = objc_getAssociatedObject(self, key) as? T else {
return defaultValue
}
return value
}
}
enum ToggleState {
case on
case off
}
extension UIView: PropertyStoring {
typealias T = ToggleState
private struct CustomProperties {
static var toggleState = ToggleState.off
}
var toggleState: ToggleState {
get {
return getAssociatedObject(&CustomProperties.toggleState, defaultValue: CustomProperties.toggleState)
}
set {
return objc_setAssociatedObject(self, &CustomProperties.toggleState, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
}
Однако при копировании UIView его подпредставления не будут сохранять правильное состояние переключения.
Кто-нибудь получил решение, которое может не только скопировать UIView, но и сохранить переменные из расширения?
P.S. Я не могу использовать подкласс в качестве решения