望其项背 iOS - swift: 泛型(泛型函数,泛型结构体,泛型类,泛型下标,通过 : 实现泛型的类型约束,通过 where 实现泛型的类型约束)

项目地址 https://github.com/webabcd/IosDemo
作者 webabcd

望其项背 iOS - swift: 泛型(泛型函数,泛型结构体,泛型类,泛型下标,通过 : 实现泛型的类型约束,通过 where 实现泛型的类型约束)

示例如下:

SwiftView12.swift

/*
 * 本例用于演示泛型(泛型函数,泛型结构体,泛型类,泛型下标,通过 : 实现泛型的类型约束,通过 where 实现泛型的类型约束)
 */

import SwiftUI

struct SwiftView12: View {
    
    var result: String = ""
    
    init() {
        result = sample1() // 泛型函数,泛型结构体,泛型类
        result += "\n"
        result += sample2() // 通过 : 实现泛型的类型约束,通过 where 实现泛型的类型约束
        result += "\n"
        result += sample3() // 泛型下标
    }

    var body: some View {
        VStack {
            HStack {
                Text(result)
                Spacer()
            }
            Spacer()
        }
    }
    
    func sample1() -> String {
        // 泛型函数的使用
        let a = func1(t: "webabcd")
        
        // 泛型结构体(泛型类也是类似的)的使用
        var b = Struct1<String>()
        b.push(t: "webabcd")
        b.push(t: "wanglei")
        
        return "\(a), \(b.items)"
    }
    // 泛型函数
    func func1<T>(t: T) -> T {
        return t
    }
    // 泛型结构体(泛型类也是类似的)
    struct Struct1<T> {
        var items = [T]()
        mutating func push(t: T) {
            items.append(t)
        }
        
    }
    
    
    func sample2() -> String {
        let a = SwiftView12_Class1()
        let b = func2(a: a)
        let c = func3(a: "webabcd")

        return "\(b), \(c)"
    }
    // 泛型的类型约束(通过 : 实现),泛型结构体和泛型类中的泛型的类型约束也是类似的
    // 类似如下方式约束泛型必须是指定的类型(也可以约束泛型符合某个协议,或同时符合多个协议)
    func func2<T: SwiftView12_Class1>(a: T) -> String {
        return "name:\(a.name), age:\(a.age)"
    }
    // 泛型的类型约束(通过 where 实现),泛型结构体和泛型类中的泛型的类型约束也是类似的
    // 类似如下方式约束泛型必须实现 Equatable 协议
    func func3<T>(a: T) -> String where T: Equatable {
        return "\(a)"
    }
    
    
    func sample3() -> String {
        let a = SwiftView12_Class1()
        // 泛型下标的使用
        let b = SwiftView12_Struct1[a]
        
        return "\(b)"
    }
}


class SwiftView12_Class1 {
    var name: String = "webabcd"
    var age: Int = 40
}

struct SwiftView12_Struct1 {
    // 泛型下标(约束了泛型 T 必须是 SwiftView12_Class1 类型)
    static subscript<T: SwiftView12_Class1>(a: T) -> String {
        get {
            return a.name
        }
    }
}

项目地址 https://github.com/webabcd/IosDemo
作者 webabcd

posted @ 2021-06-29 09:14  webabcd  阅读(8)  评论(0编辑  收藏  举报