• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

示例如下:

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift中类与结构的初始化发布时间:2022-07-13
下一篇:
swift实现饭否应用客户端源码发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap