swift的泛型貌似还差点意思

本文探讨了Swift中容器协议的设计与实现,通过具体示例展示了如何使用泛型创建一个灵活的栈数据结构。文章深入解析了泛型在Swift中的运用限制及其可能的原因,并提出了一种更为灵活的泛型容器类设计方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

protocol Container {
    typealias ItemType
    mutating func append(item: ItemType)
    mutating func removelast() -> ItemType
    var count: Int {get}
    subscript(i: Int) -> ItemType{get}

}

// Container<T> ???
// protocol not gen!
struct Hole<T>: Container {
    typealias ItemType = T
    var elements = ItemType[]()
    var count: Int {
    get{
        return elements.count
    }
    }
    mutating func append(item: ItemType){
        elements.append(item)
    }
    subscript(i: Int) -> ItemType {
        return elements[i]
    }
    mutating func removelast() -> ItemType{
        return elements.removeLast()
    }
}

class Stack<T>{
    var storage = Hole<T>()
    typealias ItemType = T
    typealias StorageType = Hole<T>.ItemType
    func push(item:ItemType) {
        storage.append(item)
    }
    func pop() -> ItemType{
        return storage.removelast()
    }
}

protocol不支持泛型,带来很多限制,不够灵活, 难道是为了兼容objc?

如果可以这么用,就会更灵活

class Stack<T, T2:Container>{
    var storage = T2<T>()
    ....
}

 

转载于:https://www.cnblogs.com/lightlfyan/p/3768353.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值