美文网首页
Swift: typealias、associatedtype

Swift: typealias、associatedtype

作者: yehkong | 来源:发表于2017-05-27 16:27 被阅读0次

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指定不同的打印类型,实现不同的打印方法

相关文章

  • Swift: typealias、associatedtype

    typealias的用法: typealias是给现有的类型(包括系统和自定义的)进行重新命名,然后就可以用该别名...

  • swift associatedtype和typealias

    typealias 1、可以用来对已有的类型进行重命名,比如在表示两点之间的距离的时候,可以使用typealias...

  • Swift 5.0-typealias与associatedty

    Swift 中关键字typealias重命名与associatedtype关联对象,在实际开发中比较常见。 typ...

  • Swift - Kingfisher 之 Kingfisher.

    前言 在学习Swfit语法的时候,就看到 AssociatedType 和 typealias 这两个关键字,但是...

  • Swift associatedtype

    在协议中除了定义属性和方法外,我们还能定义类型的占位符,让实现协议的类型来指定具体的类型。 添加 associat...

  • swift - typealias详解

    typealias 如果挑出swift中好用的功能,我认为typealias 应该是首当其冲的了typealias...

  • Swift - typealias

    typealias用来为已存在的类型重新定义名称的。 通过命名,可以使代码变得更加清晰。使用的语法也很简单,使用 ...

  • Swift中associatedtype

  • Swift 中类型别名的用途

    什么是 typealias? 当我们回忆那些 Swift 强大的语言特性时,很少有人会首先想到 typealias...

  • Swift 2.1  typealias

    typealias是用来给已经存在的类型重新命名名字的,通过命名,我们可以写出更加清晰的代码。 typealias...

网友评论

      本文标题:Swift: typealias、associatedtype

      本文链接:https://www.haomeiwen.com/subject/htmqfxtx.html