阅读前了解知识点
泛型文档中文版
Swift改变日志,搜索关键字typealias

typealias

typealias是指类型别名,将一个已存在的类型别名一个其他名字,比如:

// 我经常干的
typealias NetParams = [String: Any]  /// 网络请求参数
// 系统Core Location 的经纬度类型
public typealias CLLocationDegrees = Double

这样做的好处:

  • 很好的标识业务,而不仅仅是全篇的基本类型。比如我的NetParams 一看就知道用于网络请求传参,看见TimeInterval就知道这个值与时间戳有关系。
  • 方便统一类型管理, 比如定义定义属性 var orderId: Int, 后期发现可能存在越界,又改为Sting,如果定义别名类型,就很方便更改。
  • 待补充

typealias 常用指南

已有参数业务化别名

就像这个:

typealias name = existing type

// 我经常干的
typealias NetParams = [String: Any]  /// 网络请求参数
// 系统Core Location 的经纬度类型
public typealias CLLocationDegrees = Double
typealias CellItme = (title: String, content: String)

条件编译

开源框架多平台统一类型, 或者条件编译统一类型。比如:

#if os(OSX)typealias SKColor = NSColor
#elseif os(iOS)typealias SKColor = UIColor
#elsetypealias SKColor = Green
#endif

就统一了颜色。不用每个地方都用条件编译。

协议关联类型(swift2.2之前)

swift2.2之前

protocol RawRepresentable {typealias RawTypestatic func fromRaw(raw: RawType) -> Self?func toRaw() -> RawType
}

swift2.2之后,使用associatedtype

protocol P {associatedtype Ty
}

别名泛型类型

Swift3之后就可以为 带有泛型的类型 别名。

typealias StringDictionary<T> = Dictionary<String, T>
typealias IntFunction<T> = (T) -> Int
typealias MatchingTriple<T> = (T, T, T)
typealias BackwardTriple<T1, T2, T3> = (T3, T2, T1)

闭包定义

建议使用别名定义闭包,减少代码长度,方便阅读。

typealias CompletionHandler =(token: Token, error: Error?) -> Void   // error: function types cannot have argument labelstypealias CompletionHandler =(_ token: Token, _ error: Error?) -> Void   // okay: names are for documentation purposes

Swift5.1也支持自动闭包使用别名定义了【自动闭包:不带参数,有返回值,调用才返回值】

class Foo {typealias FooClosure = () -> String  // 别名自动闭包func fooFunction(closure: @autoclosure FooClosure) {}
}

在泛型的结构体和类中使用

友情提示:RxSwift框架中使用了大量的typealias泛型,可以去看看。

声明某个泛型类的时候,可以用typealias来统一内部的泛型

// 转换类型
struct Transformer<Old,New> {typealias O = Oldtypealias N = Newlet closure: (O) -> Nfunc transformed(value old: O) -> N {return closure(old)}/// 类方法中使用static func staticMethod(value: Transformer<Old,New>.O) -> Transformer<Old, New>.N {...return N类型值}
}

Swift typealias使用相关推荐

  1. Swift - typealias

    typealias用来为已存在的类型重新定义名称的. 通过命名,可以使代码变得更加清晰.使用的语法也很简单,使用 typealias 关键字像普通的赋值语句一样,可以将某个在已经存在的类型赋值为新的名 ...

  2. ux设计中的各种地图_UX中的灰色图案,我们该在有用的设计与有害的设计之间划清界限...

    ux设计中的各种地图 In Netflix's The Social Dilemma we learn how closely data and web design work together to ...

  3. 编码冠状病毒React中相同偏见的人工智能局限性

    娜塔莉·格罗弗(Natalie Grover) (by Natalie Grover) As the coronavirus pandemic endures, the socio-economic ...

  4. Swift中使用typealias定义一个闭包closure

    在OC中我们定义一个Blocks是这样定义的: typedef void (^ZWProgressHUDCompletionBlock)(); 在Swift中定义一个闭包是这种: typealias ...

  5. swift_042(Swift的typealias(别名)的用法)

    Swift中的typealias(别名)的用法 // swift中的typedef:使用关键字(typealias)定义类型别名,类似typedef typealisa 简单使用 1.示例如下 typ ...

  6. swift associatedtype和typealias

    typealias 1.可以用来对已有的类型进行重命名,比如在表示两点之间的距离的时候,可以使用typealias将x和y轴的距离Double表示为Distance. func distance(p1 ...

  7. swift 多线程GCD和延时调用

    GCD 是一种非常方便的使用多线程的方式.通过使用 GCD,我们可以在确保尽量简单的语法的前提下进行灵活的多线程编程.在 "复杂必死" 的多线程编程中,保持简单就是避免错误的金科玉 ...

  8. swift 中高德地图随时读取坐标地点的写法

    自己写的方法  不比比  自己能看懂就行   只用作自己学习swift的总结 import UIKit typealias block = (String,String) ->() class ...

  9. Swift 中 10 个震惊小伙伴的单行代码

    几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红.很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,比如 Haskell,Ruby,Groo ...

最新文章

  1. 炸裂!这些大厂跪求的人才太牛了!
  2. 神经正切核,深度学习理论研究的最新热点?
  3. ASP.NET Core结合Nacos来完成配置管理和服务发现
  4. python在线编译-在线编译python
  5. 由Lucnene 对于预治疗的文字,全角半角转换器(可执行)
  6. 论文原文解读汇总(持续更新中)
  7. c++ console 取实时输入_灵活使用 console 让 js 调试更简单
  8. LeetCode 680 验证回文字符串 Ⅱ
  9. flinkTime与Window入门详解
  10. [翻译]Visual Odmetry from scratch - A tutorial for beginners
  11. Visio2002、2003、2007下载地址整理 以及 相关网址链接
  12. MySQL table_cache 优化(四)
  13. Flixel Dame 坦克大战(二)Dame-editor使用指南
  14. Effient技术原理
  15. 利用MATLAB画传递函数的奈奎斯特曲线
  16. 开发一个Android志愿填报系统(后台管理+前台app)毕业设计
  17. 【论文阅读】6-Automatic 3D Model Construction for Turn-Table Sequences
  18. C语言(宏,内存,地址,指针,解引用)
  19. 使用OpenDNS解决DNS域名劫持
  20. 彻底掌握 Javascript(十一)日期-曾亮-专题视频课程

热门文章

  1. spring cloud微服务分布式云架构-Gateway入门
  2. Google Guava 概要
  3. Unity3D小功能 小技巧 小教程 小原理(持续更新...)
  4. 详解Jedis连接池报错处理
  5. MySql层级树查询
  6. 上海将打造“泛在化、融合化、智敏化”智慧城市
  7. 信息安全系统设计基础第十一周学习总结
  8. 新型的大型bbs架构(squid+nginx
  9. 支持html5浏览器速查
  10. bootstrap ui