class A {
private var value: Int
init(value: Int) {
self.value = value
}
}
我们有A类,我使用 A.init(值:5)和 A(值:5)创建此对象有什么区别?感谢
答案 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)
同样,这是风格的问题。