如何测试`NSObject`是否具有可以设置的任意名称的属性?

San*_*ill 3 nsobject ios swift swift4

我想从字典中实现模型的通用填充.我使用以下测试测试模型是否具有属性,但条件总是失败:

if (self.responds(to:(NSSelectorFromString(keyName)))){
    self.setValue(keyValue, forKey: key )
}
Run Code Online (Sandbox Code Playgroud)

这是一个示例代码:

import UIKit

class myModel: NSObject {    
    var userName: String = ""
    var phoneNumber: String = ""

    init(dict: Dictionary<String, Any>) {
        super.init()

        for (key, value) in dict {
            let keyName = key     
            let keyValue: String = String(describing: value)

            print("key \(key) value \(value)")

            if (self.responds(to:(NSSelectorFromString(keyName)))){
                self.setValue(keyValue, forKey: key )
            }
        }          
    }        
}
Run Code Online (Sandbox Code Playgroud)

Ami*_*han 12

你差不多完成了.在NSObject类的顶部添加以下内容 - @objcMembers

如 -

import UIKit

@objcMembers

class myModel: NSObject { 
Run Code Online (Sandbox Code Playgroud)