Swift: typealias、associatedtype

typealias的用法:

typealias是给现有的类型(包括系统和自定义的)进行重新命名,然后就可以用该别名来代替原来的类型,已达到改善程序可读性,而且可以自实际编程中根据业务来重新命名,可以表达实际意义。

使用方法:typealias <#type name#> = <#type expression#>
用法实例:typealias DistanceUnit = Float //表示距离

有一个细节要注意就是:在涉及泛型重名时,不能将整个泛型类型进行重命名,还是看实例:

struct Dog<T> {}
typealias collie = Dog
typealias collie1<T> = Dog<T>
typealias wolfDog = Int
typealias collie2 = Dog<wolfDog>

typealias collie3= Dog<T> //Use of undeclared type 'T'不能通过编译
  • 我个人是这么理解:定义的新名字新类型必须满足确定性;上面的typealias collie3= Dog<T>中T不确定,所以不能合并定义到左值中。

associatedtype的用法:

在定义协议时,可以用associatedtype声明一个或多个类型作为协议定义的一部分,叫关联类型。这种关联类型为协议中的某个类型提供了别自定义名字,其代表的实际类型或实际意义在协议被实现时才会被指定。用法实例如下:

protocol printObj {
    associatedtype ObjType //声明关联类型
    func printObj(_ obj:ObjType)
}

class printClass :printObj {
    typealias ObjType = String //指定实际类型
    func printObj(_ obj: printClass.ObjType) {
        print("obj:\(obj)")
    }
}
  • 上面的代码再扩展就可以在不同的类中通过typealias指定不同的打印类型,实现不同的打印方法

推荐阅读更多精彩内容