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

梅兰妮

我有自定义类,我想扩展它并添加存储的属性,我发现的解决方案之一是使用关联对象。我的代码如下所示:

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/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在存储到对象数组中时无法设置对象属性(JavaScript)

来自分类Dev

无法设置单个对象的属性

来自分类Dev

无法添加_tracking属性,对象不可扩展

来自分类Dev

无法访问Vuex存储对象的属性

来自分类Dev

无法选择任何Redux存储对象属性

来自分类Dev

Javascript对象文字,无法设置属性

来自分类Dev

无法在Angular JS的对象中设置属性

来自分类Dev

无法在Chrome扩展程序中将属性“ innerHTML”设置为null

来自分类Dev

物料表TypeError:无法添加属性tableData,对象不可扩展

来自分类Dev

无法添加属性“ X”,对象不可扩展角度9

来自分类Dev

React:无法添加属性“ X”,对象不可扩展

来自分类Dev

如何设置存储为对象的反射属性值?

来自分类Dev

按关联对象的属性分组

来自分类Dev

CakePHP 3:无法向会话中存储的对象添加属性。

来自分类Dev

无法在反应中分配新属性,得到`无法添加属性xxx,对象不可扩展`

来自分类Dev

扩展属性存储在哪里?

来自分类Dev

无法访问请求中对g对象设置的属性

来自分类Dev

无法在socket.io握手对象上设置属性

来自分类Dev

无法设置对象的属性,因为它处于只读状态

来自分类Dev

Vue无法监视循环内设置的对象属性

来自分类Dev

Vue无法监视循环内设置的对象属性

来自分类Dev

无法保存所有属性设置的托管对象

来自分类Dev

Swift:无法在可变对象参数上设置属性值

来自分类Dev

无法在对象实例中设置任意属性

来自分类Dev

将对象与子(关联)对象一起存储,存储

来自分类Dev

无法添加属性X,更新ngrx 9后对象无法扩展

来自分类Dev

设置与房间相关的扩展属性

来自分类Dev

Swift:扩展中存储的属性无法识别的选择器异常

来自分类Dev

设置对象的属性

Related 相关文章

  1. 1

    在存储到对象数组中时无法设置对象属性(JavaScript)

  2. 2

    无法设置单个对象的属性

  3. 3

    无法添加_tracking属性,对象不可扩展

  4. 4

    无法访问Vuex存储对象的属性

  5. 5

    无法选择任何Redux存储对象属性

  6. 6

    Javascript对象文字,无法设置属性

  7. 7

    无法在Angular JS的对象中设置属性

  8. 8

    无法在Chrome扩展程序中将属性“ innerHTML”设置为null

  9. 9

    物料表TypeError:无法添加属性tableData,对象不可扩展

  10. 10

    无法添加属性“ X”,对象不可扩展角度9

  11. 11

    React:无法添加属性“ X”,对象不可扩展

  12. 12

    如何设置存储为对象的反射属性值?

  13. 13

    按关联对象的属性分组

  14. 14

    CakePHP 3:无法向会话中存储的对象添加属性。

  15. 15

    无法在反应中分配新属性,得到`无法添加属性xxx,对象不可扩展`

  16. 16

    扩展属性存储在哪里?

  17. 17

    无法访问请求中对g对象设置的属性

  18. 18

    无法在socket.io握手对象上设置属性

  19. 19

    无法设置对象的属性,因为它处于只读状态

  20. 20

    Vue无法监视循环内设置的对象属性

  21. 21

    Vue无法监视循环内设置的对象属性

  22. 22

    无法保存所有属性设置的托管对象

  23. 23

    Swift:无法在可变对象参数上设置属性值

  24. 24

    无法在对象实例中设置任意属性

  25. 25

    将对象与子(关联)对象一起存储,存储

  26. 26

    无法添加属性X,更新ngrx 9后对象无法扩展

  27. 27

    设置与房间相关的扩展属性

  28. 28

    Swift:扩展中存储的属性无法识别的选择器异常

  29. 29

    设置对象的属性

热门标签

归档