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

Swift 5.x 泛型类型

作者: ShenYj | 来源:发表于2020-07-10 21:44 被阅读0次
  • 除了反省函数, Swift允许你定义自己的泛型类型. 它们是可以用于任意类型的自定义类、结构体、枚举, 和ArrayDictionary方式类型.

1. 定义泛型类型
InStack.png
  • 定义一个普通的结构体
struct IntStack {
    var items = [Int]()
    mutating func push(_ item: Int) {
        items.append(item)
    }
    mutating func pop() -> Int {
        items.removeLast()
    }
}
  • 泛型结构体
struct Stack<Element> {
    var items = [Element]()
    mutating func push(_ item: Element) {
        items.append(item)
    }
    mutating func pop() -> Element {
        items.removeLast()
    }
}

var stackOfStrings = Stack<String>()
var stackOfInts = Stack<Int>()

2. 扩展泛型类型
  • 当你扩展一个泛型类型时, 不需要在扩展的定义中提供类型形式参数列表. 原始类型定义的类型形式参数列表在扩展体里仍然有效, 并且原始类型形式参数列表名称也用于扩展类型形式参数.
struct Stack<Element> {
    var items = [Element]()
    mutating func push(_ item: Element) {
        items.append(item)
    }
    mutating func pop() -> Element {
        items.removeLast()
    }
}
// 而不是写成extension Stack<Element>
// 并且泛型类型Element是可直接使用的 
extension Stack {
    var topItem: Element? {
        return items.isEmpty ? nil : items[items.count - 1]
    }
}

相关文章

  • Swift 5.x 泛型类型

    除了反省函数, Swift允许你定义自己的泛型类型. 它们是可以用于任意类型的自定义类、结构体、枚举, 和Arra...

  • 2021-12-01

    swift5基本语法-泛型函数和泛型类型 Swift中泛型可以将类型参数化,提高代码复用率,减少代码量。 一、泛型...

  • 【Swift】泛型常见使用

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

  • Swift-泛型笔记

    Swift 泛型 Swift 提供了泛型让你写出灵活且可重用的函数和类型。 Swift 标准库是通过泛型代码构建出...

  • Swift 泛型之条件性符合协议

    Swift 泛型条件性符合(Conditional conformances) 表示泛型类型只有在其类型参数满足某...

  • 泛型(iOS_9 新特性)

    作用:限制类型 为什么退出泛型:迎合swift 泛型的作用: 限制类型 提高代码的规范,减少沟通的成本 泛型的用法...

  • Swift和OC的区别

    Swift和OC的区别? 1、Swift没有地址和指针的概念 2、Swift对数据类型要求极为严谨 3、泛型,泛型...

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

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

  • 泛型

    Swift 提供了泛型让你写出灵活且可重用的函数和类型。Swift 标准库是通过泛型代码构建出来的。Swift 的...

  • Swift 泛型

    Swift 提供了泛型让你写出灵活且可重用的函数和类型。Swift 标准库是通过泛型代码构建出来的。Swift 的...

网友评论

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

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