Swift3.0泛型的使用

作者: Lucky灬Candy | 来源:发表于2016-10-27 11:34 被阅读128次

Swift 有泛型,但是这次是为了引进新的特性,就像递归协议约束(使得受限的扩展遵循新协议的能力),比如遵循 Equatable的数组的元素也是遵循 Equatable的。先看个简单的🌰

func makeArray<Item>(repeating item:  Item , numberOfTimes: Int  ) -> [Item] {
    var result = [Item]()
    for _ in 0..<numberOfTimes {
        result.append(item)
    }
    return result
}
makeArray(repeating: "knock", numberOfTimes:4)

运行结果:["knock","knock","knock","knock"]
因为泛型的缘故,使得makeArray函数可以支持很多数据类型

升级版,加入我们需要判断两个数组中是否有相同的元素,使用泛型应该如何写呢?首先应该要思考的问题如下:

  • 首先,既然需要判断两个元素相等,那么数组内的数据类型必须实现Equatable协议
  • 其次,两个数组内元素的数据类型必须一致,否则没有继续下去的必要
  • 最后,因为使用的是泛型,那未必是数组(上面说数组是为了便于表达_),但有一点是可以肯定的就是可以Iterator,否则无法取得其元素类型

第一步###

先按照最简单的思维,定义函数:

func hasSameElement<A:Sequence,B:Sequence>(first a:A,another b:B){}

第二步###

既然是检测有没有相同测值,那可定需要将检测结果返回,于是修改如下:

func hasSameElement<A:Sequence,B:Sequence>(first a:A,another b:B) -> Bool{
    return false
}

第三步###

增加条件约束:1:实现了Equatable,且比较的元素类型相同:

func hasSameElement<A:Sequence,B:Sequence>(first a:A,another b:B) -> Bool where A.Iterator.Element:Equatable,A.Iterator.Element == B.Iterator.Element{
    return false
}

最后###

实现函数逻辑,即比较元素相等:

func hasSameElement<A:Sequence,B:Sequence>(first a:A,another b:B) -> Bool where A.Iterator.Element:Equatable,A.Iterator.Element == B.Iterator.Element{
    for a_e in a{
        for b_e in b{
            if a_e == b_e{
                return true
            }
        }
    }
    return false
}

相关文章

  • Swift3.0泛型的使用

    Swift 有泛型,但是这次是为了引进新的特性,就像递归协议约束(使得受限的扩展遵循新协议的能力),比如遵循 Eq...

  • Java-API-集合框架(三)-泛型

    泛型的由来和基本使用 泛型的擦除 泛型类的使用 泛型方法的使用 泛型接口 泛型通配符(?) 通配符? 在api中的...

  • 夯实JAVA基础之 - 泛型

    泛型的定义及使用 1. 定义泛型: 2. 类中使用泛型 3. 使用泛型类 4. 使用泛型的优势? 多泛型变量的定义...

  • Java泛型

    本文介绍的知识点 泛型是什么? 泛型的使用在反射中使用泛型在集合类中使用泛型 关于泛型擦除如何理解?如何避免泛型擦...

  • java基础-day13-泛型

    泛型 1. 泛型 1.1 为什么要使用泛型 1.2 泛型的基本格式 1.3 泛型在方法中使用 1.3 泛型在类内的...

  • 四 集合 ——第二节 泛型

    文章目录 1、 泛型概念2、 使用泛型的好处3、 泛型的定义与使用 3、1 定义和使用含有泛型的类3、2 含有泛型...

  • Java 泛型

    一、泛型使用 1、泛型类 2、泛型函数 二、泛型限定符 1、泛型上限 泛型上限使用 extends 限制 多个限制...

  • Objective-C 泛型 协变 逆变

    为什么要使用泛型 如何使用泛型 限制泛型 协变 逆变 为什么要使用泛型 在使用NSArray, NSSet, NS...

  • 泛型基础二

    如果不明白为什么要使用泛型,使用泛型的好处,以及泛型类,泛型接口,泛型方法等知识,请移步泛型基础一 通配符 上界通...

  • 第 29 条:优先考虑泛型

    未使用泛型 使用泛型第一种 使用泛型第二种

网友评论

    本文标题:Swift3.0泛型的使用

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