我正在使用 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
}
}
答案 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