无法设置存储 属性 与扩展中的关联对象

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/