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

时间:2014-06-13 21:32:26

标签: objective-c swift

Apple's documentation非常清楚Objective-C初始化方法如何转换为Swift初始化器:

  

“init”前缀被切掉并成为一个关键字,表示该方法是初始值设定项。对于以“initWith”开头的init方法,“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中,你这样称呼它:

     

SWIFT

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

将Objective-C工厂方法映射到Swift初始化器有哪些规则?

1 个答案:

答案 0 :(得分:6)

通过玩游戏,我可以通过以下规则将工厂方法转换为便利初始化器。

  1. 列表项
  2. 方法是一种类方法
  3. 返回类型为instancetypeMyClassName *
  4. Method至少需要一个参数
  5. 方法名称以"类名后缀&#34 ;;开头。也就是说,类名的后缀,但是你不能有部分单词的限制。第一个字母可以选择小写。
  6. 类名后缀(可选地后跟"使用"类似于initWith转换)将被剥离,方法名称的其余部分用于第一个参数,第一个字母小写。

    例如,以下转换适用:

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

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