我创建了一个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
答案 0 :(得分:0)
您可以使用我的自定义AGObject
原因@objcMembers
在Swift 4中使用
当Swift类引入许多需要Objective-C运行时行为的新方法或属性时,请在该类的声明中使用@objcMembers
属性。将@objcMembers
属性应用于类会隐式地将@objc
属性添加到其所有与Objective-C兼容的成员。因为应用@objc
属性会增加应用程序的编译大小并对性能产生负面影响,所以只有在每个成员都需要应用@objcMembers
属性时才对声明应用@objc
属性。
@objcMembers class User: NSObject {
...
}