美文网首页iOS Developer
No visible @interface for '***'

No visible @interface for '***'

作者: 韦弦Zhy | 来源:发表于2020-12-07 17:33 被阅读0次

    今天写代码遇到一个如下编译错误:
    No visible @interface for 'IVDevMgr' declares the selector 'setTimeZoneWithTimeZone:to:responseHandler:'

    正常来说是一个很常见的bug,即

    • IVDevMgr这个类没有定义这个方法。
    • 引用Framework 的 searchPath 有问题。
    • 没有清除缓存
    • ...

    但是之所以今天要在记录一下,是因为遇到了一种新的情况。。。。找了半天
    IVDevMgr 是一个静态 Framework, 有如下方法:

    /// 设置设备时区
    /// - Parameters:
    ///   - timeZone: 时区
    ///   - device: 设备id
    ///   - responseHandler: 回调
    func setTimeZone(_ timeZone: Float, to device: String, responseHandler: ((_ error: Error?) -> Void)?) {
          ...
    }
    

    这是一个给设备设置时区的方法,很简单,代码中也正常使用:

    IVDevMgr.shared.setTimeZone(8, to: deviceId) { (error) in
       ...
    }
    

    之所以会遇到编译错误,是我在OC代码中使用了它

    [IVDevMgr.shareInstance setTimeZoneWithTimeZone:8 to:deviceId responseHandler:nil];
    

    能正常联想,但是就编译报错,最坑的是另一个方法能够正常调用:

    /// 读取设备时区
    /// - Parameters:
    ///   - device: 设备id
    ///   - responseHandler: 回调
    func getTimeZone(of device: String, responseHandler: ((_ timeZone: Float, _ error: Error?) -> Void)?) {
        ...
    }
    

    即:

    [IVDevMgr.shareInstance getTimeZoneOf:device.contactId responseHandler:nil];
    

    这个时候我真的是黑人问号了。。。

    Why???

    最终找到了元凶:“_” 你没看错,就是它,因为这个库是 Swift 写的,主要也是给Swift 调用,省略这个标签可以让代码好看且整洁,自然而然就这样用了。。。结果,

    也许是Xcode的bug 吧, 直接去掉,OC代码不用动,正常编译~~~

    相关文章

      网友评论

        本文标题:No visible @interface for '***'

        本文链接:https://www.haomeiwen.com/subject/sgbiwktx.html