NSObject类用于以嵌套类方式设置值(Swift 4.0 - Xcode 9.1)

时间:2017-12-20 14:55:25

标签: swift nsobject

我创建了一个NSObject的子类,并使用NSObject方法setValuesForKeys()自动设置我的类属性,并且它工作正常。但是现在我在这个子类中设置嵌套类以再次设置值。这是我的代码。

class User: NSObject {
    private let keys = ["id", "first_name", "last_name"]

    @objc var id: String?
    @objc var first_name: String?
    @objc var last_name: String?

    override init() {
        super.init()
    }

    init(dic: [String: Any]) {
        super.init()
        self.setValuesForKeys(dic)
    }
}

前:

let user = User(dic: Dictionary)
user.first_name // Name of User

但现在我想这样做..

class User: NSObject {
    class Addr: NSObject {
        private let keys = ["block", "zipcode", "country"]

        @objc var block:String?
        @objc var zipcode:String?
        @objc var country:String?

        override init() {
            super.init()
        }   
    }

    private let keys = ["id", "first_name", "last_name", "addr"]

    @objc var id:String?
    @objc var first_name:String?
    @objc var last_name:String?
    @objc var addr:Addr?

    override init() {
        super.init()
    }

    init(dic: [String: Any]) {
        super.init()
        self.setValuesForKeys(dic)
    }
}

现在我需要像那样访问..

let user = User(dic: Dictionary)
user.addr.block // need to get block value

1 个答案:

答案 0 :(得分:0)

您可以使用我的自定义AGObject

原因@objcMembers在Swift 4中使用

当Swift类引入许多需要Objective-C运行时行为的新方法或属性时,请在该类的声明中使用@objcMembers属性。将@objcMembers属性应用于类会隐式地将@objc属性添加到其所有与Objective-C兼容的成员。因为应用@objc属性会增加应用程序的编译大小并对性能产生负面影响,所以只有在每个成员都需要应用@objcMembers属性时才对声明应用@objc属性。

@objcMembers class User: NSObject {
...
}