Swift typealias使用
阅读前了解知识点
泛型文档中文版
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使用相关推荐
- Swift - typealias
typealias用来为已存在的类型重新定义名称的. 通过命名,可以使代码变得更加清晰.使用的语法也很简单,使用 typealias 关键字像普通的赋值语句一样,可以将某个在已经存在的类型赋值为新的名 ...
- ux设计中的各种地图_UX中的灰色图案,我们该在有用的设计与有害的设计之间划清界限...
ux设计中的各种地图 In Netflix's The Social Dilemma we learn how closely data and web design work together to ...
- 编码冠状病毒React中相同偏见的人工智能局限性
娜塔莉·格罗弗(Natalie Grover) (by Natalie Grover) As the coronavirus pandemic endures, the socio-economic ...
- Swift中使用typealias定义一个闭包closure
在OC中我们定义一个Blocks是这样定义的: typedef void (^ZWProgressHUDCompletionBlock)(); 在Swift中定义一个闭包是这种: typealias ...
- swift_042(Swift的typealias(别名)的用法)
Swift中的typealias(别名)的用法 // swift中的typedef:使用关键字(typealias)定义类型别名,类似typedef typealisa 简单使用 1.示例如下 typ ...
- swift associatedtype和typealias
typealias 1.可以用来对已有的类型进行重命名,比如在表示两点之间的距离的时候,可以使用typealias将x和y轴的距离Double表示为Distance. func distance(p1 ...
- swift 多线程GCD和延时调用
GCD 是一种非常方便的使用多线程的方式.通过使用 GCD,我们可以在确保尽量简单的语法的前提下进行灵活的多线程编程.在 "复杂必死" 的多线程编程中,保持简单就是避免错误的金科玉 ...
- swift 中高德地图随时读取坐标地点的写法
自己写的方法 不比比 自己能看懂就行 只用作自己学习swift的总结 import UIKit typealias block = (String,String) ->() class ...
- Swift 中 10 个震惊小伙伴的单行代码
几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红.很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,比如 Haskell,Ruby,Groo ...
最新文章
- 炸裂!这些大厂跪求的人才太牛了!
- 神经正切核,深度学习理论研究的最新热点?
- ASP.NET Core结合Nacos来完成配置管理和服务发现
- python在线编译-在线编译python
- 由Lucnene 对于预治疗的文字,全角半角转换器(可执行)
- 论文原文解读汇总(持续更新中)
- c++ console 取实时输入_灵活使用 console 让 js 调试更简单
- LeetCode 680 验证回文字符串 Ⅱ
- flinkTime与Window入门详解
- [翻译]Visual Odmetry from scratch - A tutorial for beginners
- Visio2002、2003、2007下载地址整理 以及 相关网址链接
- MySQL table_cache 优化(四)
- Flixel Dame 坦克大战(二)Dame-editor使用指南
- Effient技术原理
- 利用MATLAB画传递函数的奈奎斯特曲线
- 开发一个Android志愿填报系统(后台管理+前台app)毕业设计
- 【论文阅读】6-Automatic 3D Model Construction for Turn-Table Sequences
- C语言(宏,内存,地址,指针,解引用)
- 使用OpenDNS解决DNS域名劫持
- 彻底掌握 Javascript(十一)日期-曾亮-专题视频课程