如何将Objective-C工厂方法转换为Swift便捷初始化程序?

杰森

Apple的文档非常清楚地说明了如何将Objective-C初始化方法转换为Swift初始化器:

“ init”前缀被切掉,成为一个关键字,指示该方法是一个初始化程序。对于以“ initWith”开头的初始化方法,“ With”也将被分割。从中分离出“ init”或“ initWith”的选择器部件的第一个字母变为小写,并且该选择器部件被视为第一个参数的名称。选择器的其余部分也对应于参数名称。

也可以使用工厂类方法作为初始化程序。但是,关于这些选择器名称如何映射到Swift函数的信息很少:

为了保持一致性和简化性,Objective-C工厂方法被映射为Swift中的便利初始化程序。这种映射使它们可以与初始化程序使用简洁明了的语法一起使用。例如,在Objective-C中,您可以像下面这样调用此工厂方法:

目标C

UIColor *color = [UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:1.0];

在Swift中,您可以这样称呼它:

迅速

let color = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)

将Objective-C工厂方法映射到Swift初始化程序的规则是什么?

杰森

根据我的经验,下面的规则用于将工厂方法转换为便利的初始化方法。

  1. 项目清单
  2. 方法是一类方法
  3. 返回类型为instancetypeMyClassName *
  4. 方法至少需要一个参数
  5. 方法名以“类名后缀”开头;也就是类名的后缀,并且限制为不能有部分单词。第一个字母可以选择为小写。

initWith删除了类名后缀(在转换中也可以选择后面跟着“ With” ),方法的其余部分用于第一个参数,首字母小写。

例如,以下转换适用:

[MyClassName myClassNameWithObject:obj] → MyClassName(object: obj)
[MyClassname classNameWithObject:obj]   → MyClassName(object: obj)
[MyClassName nameObject:obj]            → MyClassName(object: obj)

注意:由于所有这些都映射到同一个swift初始化程序,因此只有一个可用(通常是第一个声明的)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以在Objective-C中调用Swift便捷初始化程序

Objective-C如何将NSURL转换为NSString?

如何将元组转换为初始化列表

如何在工厂方法中初始化具有多个参数构造函数的类

如何将AnyClass转换为特定的类并在Swift中动态初始化它?

如何从Swift调用Objective-C类的工厂方法?

您如何将数据从Objective C传递到Swift?

如何将Swift String桥接到Objective C NSString?

如何将Swift代码导入Objective-C?

如何将整个文件夹或程序包从Java转换为Objective-C?

Objective-C-如何将文件路径转换为符合外壳程序的文件路径

如何将 Lerp 从非初始化值转换为初始化值?

如何将Objective-C块转换为Swift闭包?

如何将Swift类转换为UnsafePointer,例如Objective-C中的__bridge

如何将Objective-C代码转换为Swift代码-错误处理,iOS

如何将Objective-C App委托转换为Swift?

如何将Objective-C`sortedArrayUsingSelector:NSSelectorFromString`转换为swift?

Objective-C-如何将数组写入文件?

Objective-C如何将C结构初始化为属性?

Objective-C如何将击键转换为ASCII字符代码?

如何将 HEXString (NSString) 转换为 ByteArray Objective-C

如何将iOS Objective-C类别接口代码转换为RubyMotion?

如何将整数转换为Objective-C中的相应单词?

如何将位操作代码从Java转换为Objective-C?

如何将UIImagePicker图像转换为字节数组Objective-C

Objective-C如何将nsdata从Web服务转换为nsarray

如何将字符串转换为字典 iOS Objective C

初始化时无法将“ <括号包围的初始化程序列表>”转换为“ int *”

如何将此Swift语法转换为Objective C?