当前位置:   iOS > 正文

为什么delegate.respondsToSelector(Selector("testEnum:"))这段代码会以快速语言返回false?

enums,ios,respondstoselector,swift,objective-c,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具



1> Martin R..:

respondsToSelector()使用Objective-C运行时,仅适用于与Objective-C兼容的方法.Swift enums只能在Objective-C中表示,如果它们被标记@objc,并且要求它们具有整数原始值.

所以

@objc enum TestEnum : Int {
    case A
    case B
    case C
}

respondsToSelector(Selector("testEnum:")会回来的true.

但请注意,对方法的存在进行测试仅对可选的协议方法有意义,并且这些方法仅适用于@objc协议,例如:

@objc enum TestEnum : Int {
    case A
    case B
    case C
}

@objc protocol TestAProtocol: NSObjectProtocol {
    optional func testEnum(testEnum: TestEnum)
    func testInt(testInt: Int)
}

然后使用可选链接更简单,而不是 respondsToSelector:

func executeDelegateCallBack() {
    delegate?.testEnum?(.A)

    // ...
}

或更详细:

func executeDelegateCallBack() {
    if let testEnum = delegate?.testEnum {
        testEnum(.A)
    } else {
        print("delegate is `nil` or does not respond to `testEnum`")
    }

    // ...
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/iOS/detail/8270
推荐阅读
相关标签
  

闽ICP备14008679号