NSStringFromSelector 返回变量名而不是变量值

时间:2020-12-22 13:35:21

标签: ios objective-c swift xcode

我正在使用 netmera 分析工具的事件结构,它会自动为任何甚至如下生成代码。

不幸的是,根据结构,它必须使用选择器获取变量的值,当我测试它时,它带来了变量的名称而不是变量的值。

你能帮忙解决这个问题吗。

class SearchControlEvent: NetmeraEvent {
    
    @objc let kSearchControlEvent: String = "xyxyxy"
    
    @objc var name: String = "test_data_1"
    @objc var screen: String = "test_data_2"
    @objc var current: String = "test_data_3"
    
    override class func keyPathPropertySelectorMapping() -> [AnyHashable: Any] {
        
        let name = NSStringFromSelector(#selector(getter: self.name))
        let screen = NSStringFromSelector(#selector(getter: self.screen))
        let current = NSStringFromSelector(#selector(getter: self.current))
    
        print(name) // print: name
        print(screen) // print: screen
        print(current) // print: current
        
        return[
            "xxx": NSStringFromSelector(#selector(getter: self.name)),
            "yyy": NSStringFromSelector(#selector(getter: self.screen)),
            "zzz": NSStringFromSelector(#selector(getter: self.current))
        ]
    }
    
    override var eventKey : String {
        let key = NSStringFromSelector(#selector(getter: self.kSearchControlEvent))

        print(key) // print: kSearchControlEvent

        return key
    }
}

3 个答案:

答案 0 :(得分:1)

NSStringFromSelector 只返回选择器的字符串表示: https://developer.apple.com/documentation/foundation/1395257-nsstringfromselector?language=objc 如果需要该值,则需要调用选择器。

答案 1 :(得分:0)

访问属性将使用引擎盖下的选择器,您不需要显式执行此操作。这应该有效:

echo $SHELL

答案 2 :(得分:0)

您需要执行选择器:

let nameSEL = NSStringFromSelector(#selector(getter: self.name))
let name = self.performSelector(nameSEL)?.takeUnretainedValue() as? String