//
// 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!
*/
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)