В чем разница между созданием объекта с 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) })

Опять же, это вопрос стиля.

Другие вопросы по тегам