无法设置存储 属性 与扩展中的关联对象
cant set stored property with associated object in extention
我有自定义 class,我想扩展它并添加存储的 属性,我找到的解决方案之一是使用关联对象来实现。我的代码看起来像这样:
import ObjectiveC
var kSomeKey = "s"
extension ProductCategory {
var parent: ProductCategory? {
get {
return objc_getAssociatedObject(self, &kSomeKey) as? ProductCategory
}
set(newValue) {
objc_setAssociatedObject(self, &kSomeKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
print(parent ?? "not set")
}
}
}
我这样设置属性:
private func makeConnectionsWithParents(forArray sorce: ProductCategory) {
for var cheesItem in sorce.childCategories! {
if cheesItem.childCategories != nil {
cheesItem.parent = sorce
makeConnectionsWithParents(forArray: cheesItem)
}
}
}
在调试中我总是得到 nil,但是在 set 方法中,newValue 被正确接收。
麻烦各位指点一下,这个问题出在哪里?
有趣的是,当将此方法应用于 UINavigationController 等标准项目时,它可以正常工作。
它仅适用于 类(不适用于结构)并且仅适用于与 objc 兼容的那些。
有关解决方法,另请参阅:https://wezzard.com/2015/10/09/associated-object-and-swift-struct/
我有自定义 class,我想扩展它并添加存储的 属性,我找到的解决方案之一是使用关联对象来实现。我的代码看起来像这样:
import ObjectiveC
var kSomeKey = "s"
extension ProductCategory {
var parent: ProductCategory? {
get {
return objc_getAssociatedObject(self, &kSomeKey) as? ProductCategory
}
set(newValue) {
objc_setAssociatedObject(self, &kSomeKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
print(parent ?? "not set")
}
}
}
我这样设置属性:
private func makeConnectionsWithParents(forArray sorce: ProductCategory) {
for var cheesItem in sorce.childCategories! {
if cheesItem.childCategories != nil {
cheesItem.parent = sorce
makeConnectionsWithParents(forArray: cheesItem)
}
}
}
在调试中我总是得到 nil,但是在 set 方法中,newValue 被正确接收。 麻烦各位指点一下,这个问题出在哪里?
有趣的是,当将此方法应用于 UINavigationController 等标准项目时,它可以正常工作。
它仅适用于 类(不适用于结构)并且仅适用于与 objc 兼容的那些。
有关解决方法,另请参阅:https://wezzard.com/2015/10/09/associated-object-and-swift-struct/