Apple的文档非常清楚Objective-C初始化方法如何转换为Swift初始化器:
"init"前缀被切掉并成为一个关键字,表明该方法是初始化器.对于以"initWith"开头的init方法,"With"也会被切掉.选择器块的第一个字母"init"或"initWith"从它中分离出来,变成小写,并且选择器块被视为第一个参数的名称.其余的选择器部分也对应于参数名称.
也可以使用工厂类方法作为初始化器; 但是,关于这些选择器名称如何映射到Swift函数的信息要少得多:
为了一致性和简单性,Objective-C工厂方法在Swift中被映射为便捷初始化器.此映射允许它们使用与初始化程序相同的简洁,清晰的语法.例如,在Objective-C中,您可以像这样调用此工厂方法:
Objective-C的
Run Code Online (Sandbox Code Playgroud)UIColor *color = [UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:1.0];在Swift中,你这样称呼它:
迅速
Run Code Online (Sandbox Code Playgroud)let color = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)
将Objective-C工厂方法映射到Swift初始化器的规则是什么?
从我刚才能够解决的问题来看,以下规则用于将工厂方法转换为便利初始化器.
instancetype或MyClassName *initWith剥离了类名后缀(在转换中可选地后跟"With" ),并且方法名称的其余部分用于第一个参数,第一个字母是小写的.
例如,以下转换适用:
[MyClassName myClassNameWithObject:obj] ? MyClassName(object: obj)
[MyClassname classNameWithObject:obj] ? MyClassName(object: obj)
[MyClassName nameObject:obj] ? MyClassName(object: obj)
Run Code Online (Sandbox Code Playgroud)
注意:由于这些都映射到相同的swift初始化程序,因此只有一个可用(通常是第一个声明的)
| 归档时间: |
|
| 查看次数: |
2018 次 |
| 最近记录: |