Swift 泛型与协议功能的增强

Swift 泛型与协议功能的增强,第1张

//
//  GenericsProtocolEnhance.swift
//  SwiftCode
//
//  Created by Alisa on 2022/4/19.
//  Copyright © 2022 Alisa. All rights reserved.
//

import Foundation

/*
 
** 泛型与协议功能的增强
    subscript方法可以为swift中的类添加下标访问的支持,在swift4版本后,subscript方法更加强大,其不止可以支持泛型,而且可以支持where子句
 进行协议中关联类型的约束

*/

//subscript中使用where进行泛型的约束
//下标协议
protocol Sub{
    associatedtype T
    func getIndex()->T
}
//实现下标协议的一种下标类
class Index:Sub{
    
    typealias T = Int
    var index:Int
    func getIndex() -> T {
        return self.index
    }
    init(_ index:Int){
        self.index = index
    }
}
class MyArrayNew{
    var array = Array()
    func push(item:Int){
        self.array.append(item)
    }
    //泛型并进行约束
    subscript(i:T)->Int where T.T == Int{
        return self.array[i.getIndex()]
    }
}

//混合协议的参数界定
protocol People{
    var name:String{set get}
    var age:Int{set get}
}
protocol Teach{
    func teachSwift()
}
class TeacherNew: People,Teach{
    var name: String = "Alisa"
    var age: Int = 30
    func teachSwift() {
        print("Teacher \(self.name) is \(self.age) years old!")
    }
}
class PrintTeacher{
    //这里不使用TeacherNew,因为类TeacherNew其实是Teach协议与People协议的一种混合实现,这里使用协议来进行参数的界定
    func printTeacher(p:Teach&People){
        print(p.name, p.age)
        p.teachSwift()
    }
}

class GenericsProtocolEnhance{
    
    //subscript中使用where进行泛型的约束
    func useSubscriptWhere(){
        let a = MyArrayNew()
        a.push(item: 1)
        a.push(item: 2)
        a.push(item: 3)
        a.push(item: 4)
        a.push(item: 5)
        print("a index 0 value is: \(a[Index(0)])")
        /* 打印信息:
         a index 0 value is: 1
        */
    }
    
    //混合协议的参数界定,使用协议来进行参数的界定
    func useParameterDefinitionHybridProtocol(){
        
        let tn = TeacherNew()
        let pt = PrintTeacher()
        pt.printTeacher(p: tn)
        /* 打印信息:
         Alisa 30
         Teacher Alisa is 30 years old!
        */
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存