【问题标题】:NSStringFromSelector returns variable name instead of variable valueNSStringFromSelector 返回变量名而不是变量值
【发布时间】: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
    }
}

【问题讨论】:

标签: ios objective-c swift xcode


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多