Зачем вам нужно использовать инициализаторы в Swift? - PullRequest
0 голосов
/ 21 февраля 2019

Имея эту первую структуру:

struct example {
    var name: String
    var number: Int
    func show (data: String) {
        print(data)
    }
}

let obj = example(name: "Hello World", number: 2)

И эту вторую структуру:

struct example2 {
    var nameModified: String
    var numberModified: Int
    init(nameFrom: String, numberFrom: Int) {
        nameModified = nameFrom + "World"
        numberModified = numberFrom + 1
    }
}

let obj2 = example2(nameFrom: "Hello", numberFrom: 1)

Я не вижу разницы между наличием метода инициализатора и его отсутствием.Может я не вижу надлежащей функциональности для этого.Есть ли кто-нибудь, кто мог бы указать мне правильное направление?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

В Swift классы и структуры, соответствующие приведенным ниже критериям, содержат инициализатор по умолчанию.

Swift предоставляет инициализатор по умолчанию для любой структуры или класса, который предоставляет значения по умолчанию для всех своих свойств ине предоставляет хотя бы один инициализатор сам.Инициализатор по умолчанию просто создает новый экземпляр со всеми его свойствами, для которых установлены значения по умолчанию.

https://docs.swift.org/swift-book/LanguageGuide/Initialization.html

0 голосов
/ 21 февраля 2019

В структурах функция инициализации по умолчанию выводится на основании свойств структуры.
Таким образом, вы можете либо написать эту функцию инициализации, либо опустить ее:

init(nameFrom: String, numberFrom: Int) { ... }

Преимущество добавленияФункция init - это то, что вы можете выполнять код внутри функции init, если это то, что вы хотели бы сделать.
Кроме того, вы, конечно, можете добавлять пользовательские convenience init функции.

Обратите внимание, однако, что это не особенность классов.Для этого вам всегда нужно явно написать инициализатор.

Вы можете безопасно сделать:

struct Example {
    var name: String
    var number: Int
}

... но это:

class Example {
    var name: String
    var number: Int
}

...will выдаст следующую ошибку:

В классе «Пример» нет инициализаторов

Вместо этого вам придется выполнить:

class Example {
    var name: String
    var number: Int

    init(name: String, number: Int) {
        self.name = name
        self.number = number
    }
}

Однако, если вы предоставите значения по умолчанию для свойств внутри класса, вам не нужно будет писать явный инициализатор:

class Example {
    var name: String?
    var number: Int = 0
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...