美文网首页程序员iOS&&Swfit Developer
Swift 4.0及以上协议写法 option 可选协议实现

Swift 4.0及以上协议写法 option 可选协议实现

作者: lwhldy | 来源:发表于2019-02-27 14:45 被阅读110次

    由于swift中类和结构体都可以遵循协议,所以导致所有的协议必须实现

    那么怎么实现OC中的可选协议呢?废话不多说,上代码:
    //前面添加 objc 关键字 表示这个协议是oc的协议 class关键之表示这个协议只能类才可以遵循
    @objc protocol SomeDelegate:class {
            //前面添加 objc optional 关键字 表示这个协议的实现是可选的
            @objc optional func someFunc() -> Bool
    }
    

    上面的方法前加入optional 本质上是实现了swift的可选型特性
    上面还说到 协议@objc protocol SomeDelegate:class 前面的 @objc表示这个协议只能类才可以遵循
    这样在什么delegate属性时就可以用weak关键字来修饰

    像这样:

    weak var delegate:SomeDelegate?

    如果不用@objc来修饰协议,依然用weak来修饰delegate属性编译器就会给你报错

    'weak' must not be applied to non-class-bound 'XXXDelegate'; consider adding a protocol conformance that has a class bound

    接下来是可选协议是否实现的判断,

    无返回值

    //无参
    delegate?.someFunc?() 这样的可选型链就保证了就算代理没有实现该代理方法也不会报错
    //有参
    delegate?.someFunc?(someParam)
    

    有返回值->可选型解包

    if let value = delegate?.someFunc?() {
                return value
    }
    

    基本上就是这样,还有什么遗漏的看反馈再补充,哦了~

    相关文章

      网友评论

        本文标题:Swift 4.0及以上协议写法 option 可选协议实现

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