美文网首页
【Swift】泛型常见使用

【Swift】泛型常见使用

作者: 文子飞_ | 来源:发表于2021-06-15 18:13 被阅读0次

1、Swift泛型4种

泛型函数
泛型类型
泛型协议
泛型约束

// 泛型函数定义式
func 函数名<泛型1,泛型2,…>(形参列表) -> 返回值类型 {
      // 函数体...
}

2、泛型约束3种

继承约束:泛型类型 必须 是某个类的子类类型
协议约束:泛型类型 必须 遵循某些协议
条件约束:泛型类型 必须 满足某种条件

// 继承约束使用格式
func 函数名<泛型: 继承父类>(参数列表) -> 返回值 {
      // 函数体,泛型类型是某个类的子类类型
}

// 协议约束使用格式
func 函数名<泛型: 协议>(参数列表) -> 返回值 {
      // 函数体,泛型类型遵循某些协议
}

// 条件约束使用格式
func 函数名<泛型1, 泛型2 where 条件>(参数列表) -> 返回值 {
      // 函数体,泛型类型满足某些条件
}

定义泛型协议

/// 1、定义泛型协议
protocol LFStackProtocol {
    // associatedtype:声明关联类型(占位符)
    associatedtype LFStack
    mutating func pushValue(value: LFStack)
    mutating func popValue() -> LFStack
}

/// 泛型协议 类型 条件约束
extension LFStackProtocol where LFStack == String {}

定义泛型类型

/// 2、泛型结构体
struct LFStack<Element> {
    // 泛型属性
    var stacks: [Element] = [Element]()
}

extension LFStack: LFStackProtocol {
    
    // typealias:设置关联类型
    typealias LFStack = Element
    
    mutating func pushValue(value: Element) {
        stacks.append(value)
    }
    
    mutating func popValue() -> Element {
        stacks.removeLast()
    }
    
}

泛型函数、泛型约束

extension LFStack {
    
    var topValue: Element? {
        return self.stacks.isEmpty ? nil : self.stacks[self.stacks.count - 1]
    }
    
    /// 3、泛型函数
    func changeValue<Element>(value1: inout Element, value2: inout Element) {
        let tempVale = value1
        value1 = value2
        value2 = tempVale
        debugPrint("value1 = \(value1) --- value2 = \(value2)")
    }
    
    /// 4、泛型 协议约束
    func findIndex<Element: Equatable>(elements: [Element], element: Element) -> Int? {
        var index = 0
        for e in elements {
            // 因为遵循了Equatable协议,所以可以进行相等比较
            if e == element {
                return index
            } else {
                index += 1
            }
        }
        return nil
    }
    
}

泛型使用

class TestLFStack: NSObject {
    
    class func testLFStack() {

        var lfStack = LFStack<String>()
        lfStack.pushValue(value: "haha")
        debugPrint("popValue = \(lfStack.popValue())")

        var value1 = 11
        var value2 = 12
        lfStack.changeValue(value1: &value1, value2: &value2)

    }
    
}

相关文章

  • 【Swift】泛型常见使用

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

  • 使用Web浏览器编译Swift代码,及Swift中的泛型

    使用Web浏览器编译Swift代码,及Swift中的泛型 使用Web浏览器编译Swift代码,及Swift中的泛型

  • OneDayOneSwift[23] - Generics

    泛型是 Swift 的强大特性之一,许多 Swift 标准库是通过泛型代码构建的。事实上,泛型的使用贯穿了整本语言...

  • Swift中泛型的使用

    在使用Swift开发的过程中,我们可能经常会碰到泛型。那么究竟什么是泛型?泛型作为Swift最为强大的特性之一,该...

  • 泛型

    泛型 1.为什么要有泛型?2.泛型有什么好处?3.Swift泛型语法4.泛型的使用 为什么要有泛型 在编程世界中,...

  • 问题:泛型类,泛型结构体,泛型协议的功能特性都包含在Swift中

    Swift 包含泛型类,泛型结构体特性。泛型可以在类、结构体、枚举、全局函数或者方法中使用。 泛型协议是通过typ...

  • Swift中的泛型

    什么时候需要使用泛型 在讲到泛型之前,先写一段代码(文中的代码都是Swift书写)。 这是一个很常见的也很简单的I...

  • Swift 5.1 (21) - 泛型

    级别: ★☆☆☆☆标签:「iOS」「Swift 5.1 」「泛型」作者: 沐灵洛审校: QiShare团队 使用泛...

  • 2017-12-26

    swift泛型的使用 ''' func exchange( a: inout T, b : inout T){//...

  • Swift-泛型笔记

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

网友评论

      本文标题:【Swift】泛型常见使用

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