首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于以嵌套类方式设置值的NSObject类(Swift 4.0 -Xcode9.1)

用于以嵌套类方式设置值的NSObject类(Swift 4.0 -Xcode9.1)
EN

Stack Overflow用户
提问于 2017-12-20 22:55:25
回答 1查看 369关注 0票数 2

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

代码语言:javascript
复制
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)
    }
}

例如:

代码语言:javascript
复制
let user = User(dic: Dictionary)
user.first_name // Name of User

但是现在我想这样做..

代码语言:javascript
复制
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)
    }
}

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

代码语言:javascript
复制
let user = User(dic: Dictionary)
user.addr.block // need to get block value
EN

回答 1

Stack Overflow用户

发布于 2017-12-20 23:41:22

您可以使用我的自定义AGObject

在Swift 4中使用@objcMembers的原因

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

代码语言:javascript
复制
@objcMembers class User: NSObject {
...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47908763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档