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
#else
  typealias SKColor = Green
#endif

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

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

swift2.2之前

protocol RawRepresentable {
  typealias RawType
  static 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 labels

typealias 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 = Old
    typealias N = New
    let closure: (O) -> N
    func transformed(value old: O) -> N {
        return closure(old)
    }
    /// 类方法中使用
    static func staticMethod(value: Transformer<Old,New>.O) -> Transformer<Old, New>.N {
        ...
        return N类型值
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值