NSStringFromSelector 返回变量名而不是变量值
Posted
技术标签:
【中文标题】NSStringFromSelector 返回变量名而不是变量值【英文标题】:NSStringFromSelector returns variable name instead of variable value 【发布时间】:2020-12-22 13:35:21 【问题描述】:我正在使用 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
【问题讨论】:
看起来你在找value(forKey:)
developer.apple.com/documentation/objectivec/nsobject/…如果你需要一个非对象的结果(即值类型),做起来有点麻烦,但还是可行的***.com/a/43714950/5329717
【参考方案1】:
NSStringFromSelector
仅返回选择器的字符串表示形式:
https://developer.apple.com/documentation/foundation/1395257-nsstringfromselector?language=objc
如果需要该值,则需要调用选择器。
【讨论】:
谢谢您的回答,请您给一个代码示例。我想获取变量值。【参考方案2】:访问该属性将在后台使用选择器,您无需显式执行此操作。这应该有效:
override var eventKey : String
return self.kSearchControlEvent
【讨论】:
谢谢你的作品。但是keyPathPropertySelectorMapping函数不能作为self.screen访问 那个函数是一个类函数,所以你可以像let mapping = SearchControlEvent. keyPathPropertySelectorMapping()
一样访问它【参考方案3】:
你需要执行选择器:
let nameSEL = NSStringFromSelector(#selector(getter: self.name))
let name = self.performSelector(nameSEL)?.takeUnretainedValue() as? String
【讨论】:
以上是关于NSStringFromSelector 返回变量名而不是变量值的主要内容,如果未能解决你的问题,请参考以下文章