setValuesForKeys не работает в swift 4 в Xcode 9 - PullRequest
0 голосов
/ 01 июля 2018

У меня есть [String : NSObject] var с именем dict. Когда это выражается так:

let test = AnchorGroup(dict)

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

Я пытаюсь напечатать диктовку в 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) {
    }
}

1 Ответ

0 голосов
/ 01 июля 2018

Если вы добавите 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)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...