Когда мне действительно нужен init внутри структуры? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующее struct, и я был почти уверен, что мне нужно будет использовать init для разработки новых переменных:

struct Flat {

    let owner: String
    var tenants: [String]
    var pets: [String: Int]

    init(owner: String, tenants: [String], pets: [String: Int]) {
        self.owner = owner
        self.tenants = tenants
        self.pets = pets
    }
}

var newFlat = Flat(owner: "Mr. T", tenants: ["Rocky"], pets: ["Uncle Paulie": 1])

newFlat.tenants.append("Adrian")
print("In a Flat owned by \(newFlat.owner) live \(newFlat.tenants[0]) and \(newFlat.tenants[1]).")

Но, удалив init, я все равно получаю тот же результат и struct можно изменить.

Тогда, что будет практическим использованием init в таком случае?

1 Ответ

0 голосов
/ 10 апреля 2020

Структура имеет инициализатор по умолчанию (для каждого элемента инициализатора). Поэтому, если все ваши переменные не являются необязательными, вам не нужно писать метод init, потому что вы передадите все параметры в метод init по умолчанию.

Но если вам нужно, чтобы какая-либо переменная была нулевой или необязательной, вам нужно ввести метод init и добавить значение nil для любого параметра.

struct Flat {
    let owner: String?
    var tenants: [String]?
    var pets: [String: Int]?

    init(owner: String? = nil, tenants: [String]? = nil, pets: [String: Int]? = nil) {
        self.owner = owner
        self.tenants = tenants
        self.pets = pets
    }
}

Этим вы можете создать экземпляр структуры с любыми необязательными параметрами.

...