Swift 4.2 отвечает на Selector возвращает false, как проверить, существует ли свойство?

В следующем примере я ожидаю, что x.responds(to: Selector(name)) вернет true. Однако это не так.

x.value(forKeyPath: name) выдает signal SIGABRT об ошибке.

Тот же код работал в Swift 3.

Мой вопрос: как проверить свойства в классе (который выходит из NSObject) и извлечь их на основе строки.

import UIKit

class Test: NSObject {
    var test = "test"
}

func property(_ object: Any, _ name: String) -> Bool? {
    let x = object as? NSObject

//    x?.value(forKeyPath: name)

    return x?.responds(to: Selector(name))
}

property(Test(), "test")

(код для детской площадки в Swift 4.2)

0
источник поделиться
1 ответ

Помещение @objc перед var test @objc проблемы.

import UIKit

class Test: NSObject {
    @objc var test = "test"
}

func property(_ object: Any, _ name: String) -> Bool? {
    let x = object as? NSObject

    x?.value(forKeyPath: name)

    return x?.responds(to: Selector(name))
}

property(Test(), "test")
0
источник

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