美文网首页
关于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 一章

    想到这个问题,来源于阅读苹果官方swfit4.1文档中The Problem That Generics Solv...

  • swift入门22 范型

    Generics are one of the most powerful features of Swift, ...

  • Swift:泛型

    Generics github:Swift基础实例github:SwiftBasicTableView 泛型 简介...

  • Swift之Generics

    泛型发展 泛型程序最早出现在1970年的CLU和Ada语言中,后来被 许多基于对象和面向对象的语言采用,包括C++...

  • iOS | Swift Generics

    In this tutorial, you’ll experiment in a Swift playground...

  • 【Swift 3.1】23 - 泛型 (Generics)

    【Swift 3.1】23 - 泛型 (Generics) 自从苹果2014年发布Swift,到现在已经两年多了,...

  • swift3-generics

    swift3

  • Swift 泛型(Generics)

    泛型代码让你能根据你所定义的要求,写出可以用于任何类型的灵活的、可复用的函数。泛型是 Swift 最强大的特性之一...

  • Swift — 泛型(Generics)

    Swift — 泛型(Generics) [TOC] 本文将介绍泛型的一些用法、关联类型、where语句,以及对泛...

  • Swift 泛型(Generics)

    学习记录,有搬运 Swift泛型能够让你根据自己的需求,写出通用于的,灵活的,可复用的函数。泛型是Swfit最强大...

网友评论

      本文标题:关于swift generics 一章

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