【问题标题】:Swift iOS - How to dynamically add properties to an existing class then access themSwift iOS - 如何将属性动态添加到现有类然后访问它们
【发布时间】:2019-01-17 16:45:56
【问题描述】:

我需要将属性动态添加到现有类然后访问它们。我使用objc_setAssociatedObject 找到了this answer,但没有关于如何使用它的上下文。我怎样才能做到这一点?

let dict = ["orderId":"abc", "postId+0":"zero", "postId+1":"one", "postId+2":"two"] // postIds can go on

let order = Order(dict: dict)
let dynamicProperties = order.accessDynamicProperties()
print(dynamicProperties)

类:

class Order {

    var orderId: String?

    // I have a main initilizer that I use for something else that's why I'm using a convenience init
    convenience init(dict: [String: Any]) {
        self.init()

        orderId = dict["orderId"] as? String

        dynamicallyCreateProperties(dict: dict)
    }

    func dynamicallyCreateProperties(dict: [String: Any]) {

        for (key, value) in dict {

            if key.contains("+") {

               // dynamically add property and value to class
            }
        }
     }

     // returns something???
     func accessDynamicProperties() -> ??? {

     }
}

【问题讨论】:

  • 您真的要添加动态属性吗?相反,您可以将字典添加为属性,然后简单地将键/值对添加到该字典。
  • @DonMag 这实际上是个好主意。我刚刚尝试过,它正在工作。您可以将其发布为答案,我会接受。谢谢:)
  • @DonMag 我现在发布了一个答案。如果你发帖,我会删除我的并接受你的。感谢您的帮助:)

标签: ios swift class dictionary properties


【解决方案1】:

在 cmets 中使用 @DonMag 的建议,他给了我一个很好的选择。他建议我创建一个字典作为类的属性,然后向其中添加键值对。

class Order {

    var orderId: String?

    var dynamicDict = [String: Any]()

    convenience init(dict: [String: Any]) {
        self.init()

        orderId = dict["orderId"] as? String

        createDynamicKeyValues(dict: dict)
    }

    func createDynamicKeyValues(dict: [String: Any]) {

        for (key, value) in dict {

            if key.contains("+") {

                dynamicDict.updateValue(value, forKey: key)
            }
        }
    }
}

使用它:

let dict = ["orderId":"abc", "postId+0":"zero", "postId+1":"one", "postId+2":"two"] // postIds can go on

let order = Order(dict: dict)

for (key, value) in order.dynamicDict {
    print(key)
    print(value)
}

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 2011-01-15
    • 2019-04-28
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    相关资源
    最近更新 更多