美文网首页
Swift之协议

Swift之协议

作者: JerrySi | 来源:发表于2019-07-31 10:21 被阅读0次

    协议的概念没有什么好说的,作用和OC中也类似,但是用法比OC多变。

    1. associatedtype
      被associatedtype关键字修饰的变量,相当于一个占位符,而不能表示具体的类型,具体的类型需要让实现的类来指定。

    用法如下,实现协议的不同结构体可以传递不同类型的参数:

    protocol TestProtocol {
        associatedtype E
        func doSomething(_ parameter: E)
    }
    struct TestStruct1: TestProtocol {
        func doSomething(_ parameter: String) {
            /***/
        }
    }
    struct TestStruct2: TestProtocol {
        func doSomething(_ parameter: Array<Any>) {
            /***/
        }
    }
    

    这里有一个问题为什么不用<T>来实现,这里有一篇文章说明了这个问题:https://www.jianshu.com/p/ef4a9b56f951。但是很遗憾,针对这个文章说明的,我看的云里雾里,如果有哪位知晓,望不吝告知。

    1. where
      协议还可以结合where来使用,来控制使用范围。
    protocol TestProtocol where E == String, Self: UIView {
        associatedtype E
        func doSomething(_ parameter: E)
    }
    class TestStruct1: UIView, TestProtocol {
        typealias E = String
        func doSomething(_ parameter: E) {
            /***/
        }
    }
    

    这里对协议限制了2个使用范围:关联类型必须是String,只有UIView和其子类才能实现。

    细心的人应该发现了where的2种用法:where == T 和 where: T

    where == T是特定T类型扩展
    where: T是符合特定协议或继承指定类的类型编写扩展
    另外发现基本类型只能使用 == ,比如[String]、String等

    相关文章

      网友评论

          本文标题:Swift之协议

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