• 望其项背 iOS


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

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

    示例如下:

    SwiftView12.swift

    /*
     * 本例用于演示泛型(泛型函数,泛型结构体,泛型类,泛型下标,通过 : 实现泛型的类型约束,通过 where 实现泛型的类型约束)
     */
    
    import SwiftUI
    
    struct SwiftView12: View {
        
        var result: String = ""
        
        init() {
            result = sample1() // 泛型函数,泛型结构体,泛型类
            result += "
    "
            result += sample2() // 通过 : 实现泛型的类型约束,通过 where 实现泛型的类型约束
            result += "
    "
            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

  • 相关阅读:
    Nginx.conf 配置文件详细说明
    CentOs中iptables配置允许mysql远程访问
    CentOS 6.4下编译安装MySQL 5.6.14
    CentOS6.4下Mysql数据库的安装与配置
    让nginx支持.htaccess文件实现伪静态的方法!
    MySQL导入.sql文件及常用命令
    PHP里10个鲜为人知但却非常有用的函数
    Nginx配置文件详细说明
    linux 开机启动nginx
    Redhat系列使用ISO或者光盘制作yum本地安装源
  • 原文地址:https://www.cnblogs.com/webabcd/p/ios_SwiftView12.html
Copyright © 2020-2023  润新知