创建对象与init和()在Swift中有什么区别

时间:2017-10-11 07:51:19

标签: swift init

class A {

    private var value: Int

    init(value: Int) {
        self.value = value
    }
}

我们有A类,我使用 A.init(值:5) A(值:5)创建此对象有什么区别?感谢

1 个答案:

答案 0 :(得分:8)

两者之间没有功能差异。两种样式都将调用相同的初始化程序并生成相同的值。

我见过的大多数样式指南都倾向于忽略明确的{% assign latestPost_year = site.posts.first.date | date: "%Y" %} {% assign latestPost_day = site.posts.first.date | date: "%j" | plus: 0 %} {% assign latestPost_day_minus_week = site.posts.first.date | date: "%j" | minus: 7 %} {%- for post in site.posts -%} {% assign postYear = post.date | date: "%Y" %} {% assign postDay = post.date | date: "%j" | plus: 0 %} {%- if latestPost_year == postYear and postDay > latestPost_day_minus_week and postDay <= latestPost_day -%} <a href="{{ post.url }}">{{ post.title }}</a> {%- endif -%} {%- endfor -%} - 支持更短的.init语法 - 这也类似于许多其他语言中的构造函数语法。

也就是说,在某些情况下,能够明确引用初始化程序是有用的。例如:

  • 当可以推断出类型并且初始化行为比正在初始化的类型更重要时。能够拨打A(value:)而不是return .init(/* ... */)return SomeComplicatedType(/* ... */)

  • 将初始化程序传递给更高阶函数时,能够通过let array: [SomeComplicatedType] = [.init(/* ... */), .init(/* ... */)]而不是"something".map(String.init)

同样,这是风格的问题。