美文网首页
Swift 5.x 泛型的类型约束

Swift 5.x 泛型的类型约束

作者: ShenYj | 来源:发表于2020-07-10 22:05 被阅读0次
  • swapTwoValues(_:_:)函数和Stack类型可以用于任意类型. 但是, 有时在用于泛型函数的类型和泛型类型上, 强制其遵循特定的类型约束很有用. 类型约束指出一个类型形式参数必须继承自特定类, 或者遵循一个特定的协议、组合协议.
  • 例如, SwiftDictionary类型在可以用于字典中键的类型上设置了一个限制. 如字典中描述的一样,字典键的类型必须是可哈希的. 也就是说, 它必须提供一个使其可以唯一表示的方法. Dictionary需要它的键是可哈希的, 以便它可以检查字典中是否包含一个特定建的值. 没有了这个要求, Dictionary不能区分该插入还是替换一个指定键的值, 也不能在字典中查找已经给定的键的值.

类型约束语法
  • 在一个类型形式参数名称后面放置一个类或者协议作为形式参数列表的一部分, 并用冒号隔开, 以写出一个类型约束.
    下面展示了一个泛型函数类型约束的基本语法(和泛型类型的语法相同)
func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, SomeU: U) {
    // function body goes here
}

类型约束的应用

一个叫做findIndex(ofString:in:)的非泛型函数, 在给定的String值数组中查找给定的String值, findIndex(ofString:in:)函数返回一个可选的Int值, 如果找到了给定字符串, 他会返回数组中第一个匹配的字符串的索引值, 如果找不到给定字符串就返回nil.

func findIndex(ofString valueToFind: String, in array: [String]) -> Int? {
    for (index, value) in array.enumerated() {
        if value == valueToFind {
            return index
        }
    }
    return nil
}

泛型版本:

func findIndex<T: Equatable>(ofString valueToFind: T, in array: [T]) -> Int? {
    for (index, value) in array.enumerated() {
        if value == valueToFind {
            return index
        }
    }
    return nil
}
  • Swift标准库中定义了一个叫做Equatable的协议, 要求遵循其协议的类型要实现相等操作符(==)和不等操作符(!=), 用于比较该类型的任意两个值. 所有Swift标准库中的类型自动支持Equatable协议.
  • 任何Equatable的类型都能安全的用于findIndex(of:in:)函数, 因为可以保证那些类型支持相等操作符.
    为了表达这个事实, 当定义函数式将Equatable类型约束作为类型形式参数定义的一部分, 也就是<T: Equatable>的原因

相关文章

  • 【Swift】泛型常见使用

    1、Swift泛型4种 泛型函数泛型类型泛型协议泛型约束 2、泛型约束3种 继承约束:泛型类型 必须 是某个类的子...

  • Swift中的那些泛型约束

    协议泛型约束 将listView的类型约束在了UIScrollView及其子类 Swift2.3方法泛型约束 将l...

  • Swift 5.x 泛型的类型约束

    swapTwoValues(_:_:)函数和Stack类型可以用于任意类型. 但是, 有时在用于泛型函数的类型和泛...

  • swift泛型整理

    swift泛型知识主要包括:泛型函数、泛型协议、泛型类型、泛型约束。 一、泛型函数。 如:一个交换两个变量值的函数...

  • Swift枚举

    1.类型约束 Swift version 2.2 enum也可以进行泛型类型约束,其中大致的意思是这个Cloth...

  • swift语法 for (index, value) in ar

    本节内容摘自SwiftGG-泛型-类型约束实践[https://swiftgg.gitbook.io/swift/...

  • 泛型

    Swift 泛型 泛型主要用于解决代码的抽象能力 + 代码的复用性 例如下面的例子,其中的T就是泛型 类型约束 在...

  • Swift 泛型

    泛型函数 泛型类型 泛型约束

  • 14-泛型

    泛型(Generics) 泛型类型 关联类型(Associated Type) 类型约束 协议类型的注意点 泛型解...

  • bunny笔记|TS基础(2):泛型函数、泛型约束、在泛型约束中

    01 typescript的操纵类型 02 03 04 泛型约束 05 在泛型约束中使用类型参数 06 在泛型中使...

网友评论

      本文标题:Swift 5.x 泛型的类型约束

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