protocol MyProtocol {
//关联类型
associatedtype ItemType
mutating func append(_ item:ItemType)
mutating func getObj(_ index:Int) -> ItemType
//下标
subscript(i:Int) -> ItemType{ get }
var count: Int { get }
}
struct MyDataSturce<T>:MyProtocol {
var count: Int {
return items.count
}
subscript(i: Int) -> (T) {
return items[i];
}
var items = [T]();
mutating func getObj(_ index: Int) -> T {
return items[index];
}
mutating func append(_ item: T) {
items.append(item)
}
}
struct MyDataSturce1<T>:MyProtocol {
var items = [T]()
subscript(i: Int) -> T {
return items[i]
}
mutating func getObj(_ index: Int) -> T {
return items[index]
}
mutating func append(_ item: T) {
items.append(item)
}
var count: Int {
return items.count
}
}
//结构体stack使用泛型T作为占位符
struct Stack<T> {
var items = [T]()
mutating func push(_ item:T){
items.append(item)
}
func pop() -> T {
return items.last!
}
//查找目标在数组中的index 泛型S满足Equatable协议
static func findIndex<S:Equatable>(ofString valueToFind:S,in array:[S]) -> Int?{
for (index,value) in array.enumerated() {
if value == valueToFind {
return index;
}
}
return nil;
}
//匹配两个数组是否相等 两个数组满足MyProtocol协议 并且两个ItemType相等 并且ItemType满足Equatable协议
static func allMatch<C1:MyProtocol,C2:MyProtocol>(_ array1:C1,_ array2:C2) -> Bool where C1.ItemType == C2.ItemType,C1.ItemType:Equatable{
if array1.count != array2.count {
return false
}
for i in 0..<array1.count {
if array1[i] != array2[i] {
return false
}
}
return true
}
}
extension Stack{
func topItem() -> T? {
return items.isEmpty ? nil : items[items.count - 1];
}
}
//扩展Stack 使用泛型满足Equatable这个协议
extension Stack where T:Equatable{
func isTop(_ item:T) -> Bool {
guard let topItem = items.last else {
return false
}
return item == topItem
}
}
//扩展MyProtocol协议 使ItemType满足Equatable协议
extension MyProtocol where ItemType:Equatable{
func startWith(_ item:ItemType) -> Bool {
return count >= 1 && self[0] == item;
}
}
//扩展MyProtocol协议 使ItemType满足为Int类型
extension MyProtocol where ItemType == Int{
var sum: Int {
var ss = 0
for i in 0..<count {
ss = self[i] + ss
}
return ss
}
}
Swift泛型的一些理解
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 目录君在此~ 《别告诉我你竟然知道——乌孙!》 目录君 第四章 乌孙国的灭顶之灾 上一章讲到,乌孙部族死的死、降的...