Понимание struct initializer, если он содержит частную собственность - PullRequest
0 голосов
/ 06 марта 2019

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

struct Doctor {
    var name: String
    var location: String
    private var currentPatient = "No one"
}
let drJones = Doctor(name: "Esther Jones", location: "Bristol")

Это выдает ошибку:

Невозможно вызвать инициализатор для типа «Доктор» со списком аргументов тип '(имя: строка, местоположение: строка)'

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

Но меня смущает следующий код:

struct Doctor {
    private var currentPatient = "No one"
}
let drJones = Doctor()

Как это работает ?, не выдает никакой ошибки.

1 Ответ

3 голосов
/ 06 марта 2019

Нельзя использовать элементный инициализатор по умолчанию для назначения свойства struct с private модификатором уровня доступа.

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

Если вам нужно присвоить свою частную собственность с помощью инициализатора, вы должны написать свою собственную

init(name: String, location: String, currentPatient: String) {
    self.name = name
    self.location = location
    self.currentPatient = currentPatient
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...