В чем разница между созданием объекта с init и () в Swift
class A {
private var value: Int
init(value: Int) {
self.value = value
}
}
У нас есть класс A, и в чем разница между созданием этого объекта с использованием A.init(значение: 5) и A(значение: 5)? Спасибо
1 ответ
Там нет функциональной разницы между ними. Оба стиля будут вызывать один и тот же инициализатор и давать одинаковое значение.
Большинство руководств по стилю, которые я видел, предпочитают опускать явное .init
-часть в пользу короче A(value:)
синтаксис - это также напоминает синтаксис конструктора во многих других языках.
Тем не менее, есть несколько сценариев, в которых полезно иметь возможность явно ссылаться на инициализатор. Например:
когда тип может быть выведен, и акт инициализации важнее, чем тип, который инициализируется. Возможность звонить
return .init(/* ... */)
скорее, чемreturn SomeComplicatedType(/* ... */)
или жеlet array: [SomeComplicatedType] = [.init(/* ... */), .init(/* ... */)]
при передаче инициализатора в функцию более высокого порядка, возможность передачи
"something".map(String.init)
скорее, чем"something".map({ String($0) })
Опять же, это вопрос стиля.