setValuesForKeys не работает в swift 4 в Xcode 9

У меня есть [String: NSObject] var named dict. Когда это звучит так:

let test = AnchorGroup(dict)

а затем я использую print(test.tag_name) я ничего не получаю в командной строке.

Я пытаюсь напечатать dict в init(dict: dict). У него есть правильная информация.

Вот мой контент: ["tag_id": 1, "tag_name": LOL, "push_nearby": 0, "push_vertical_screen": 0]

class AnchorGroup: NSObject {
    //房间列表,是一个数组 room list an Array
    var room_list : [[String : NSObject]]?
    //频道名 channel name
    var tag_name : String = ""
    //频道图标 channel icon name
    var icon_name : String = "home_header_normal"

    init(dict : [String : NSObject]) {
        super.init()
        //can corretly output the dict content to command line.
        print(dict["tag_name"]!)
        //not work,when I create a instance in somewhere,it get nothing.
        setValuesForKeys(dict)
    }

    override func setValue(_ value: Any?, forUndefinedKey key: String) {
    }
}
+2
источник поделиться
1 ответ

Если вы добавите print("bad key: \(key)") в setValue(_ value: Any?, forUndefinedKey key: String) вы увидите, что tag_name является неопределенным ключом.

Проблема в том, что для всех функций кодирования ключевого значения NSObject требуется совместимость с Objective-C. Таким образом, любое свойство вашего класса, которое вы хотите работать с кодированием с ключом, должно быть отмечено с помощью @objc.

Изменить:

var tag_name : String = ""

чтобы:

@objc var tag_name : String = ""

И код:

let test : [String : NSObject] = ["tag_name" : "mytest" as NSString]
let group = AnchorGroup(dict: test)
print(group.tag_name)

дает ожидаемые результаты.

Обновите свои другие свойства по мере необходимости.

0
источник

Посмотрите другие вопросы по метке или Задайте вопрос