美文网首页
关于swift generics 一章

关于swift generics 一章

作者: 二丁目90 | 来源:发表于2018-05-22 17:02 被阅读0次

    想到这个问题,来源于阅读苹果官方swfit4.1文档中The Problem That Generics Solve一节的note:

    In all three functions, the types of a and b must be the same. If a and b aren’t of the same type, it isn’t possible to swap their values. Swift is a type-safe language, and doesn’t allow (for example) a variable of type String and a variable of type Double to swap values with each other. Attempting to do so results in a compile-time error.

    这句话的大概意思是swift是强类型的语言,并不允许两个不同类型的变量(如String和Double)进行交换,如果尝试这种行为会导致编译时错误。

    当时阅读到这一段的时候,突然发现在swift里面实现两个不同类型的变量进行交换是存在可能的,得益于swift强大的语言功能我们可以做出如下实现:

    protocol HelpProtocol{}

    class A{}

    class B{}

    extension A:HelpProtocol{}

    extension B:HelpProtocol{}

    func swapTest(a:inoutT, b:inoutT) {

        lettemp = a;

        a = b;

        b = temp

    }

    var a:HelpProtocol = A()

    var b:HelpProtocol = B()

    swap(&a, &b)

    通过以上代码我们就实现了A和B两个不通类型的数据交换。如果把A换成String,B换成Double,就完成了note里面所说的会导致编译时错误的操作。

    当然代码虽然少,但是里面已经涉及到了swift里面比较基础的一些核心概念,比如protocol可以当作类型来处理,这样其实就相当于可以通过extension把一些不同类型的数据变为一个类型,由于swift具有引用推断,所以在创建A,B时强行指定了他们所属的类,这样他们在编译的时候就被当作为一个类型,当然就可以被我们的范型交换函数交换了

    相关文章

      网友评论

          本文标题:关于swift generics 一章

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