#swift #struct #xcode12
#swift #структура #xcode12
Вопрос:
У меня есть очень простой struct
, который работает так, как ожидалось:
struct Obligation {
var date = Date()
}
let snapshotEntry = Obligation(date: Date())
однако, если я добавлю частный var к этой структуре, я получу ошибку компиляции в строке, в которой я создаю экземпляр моей структуры, со словами Argument passed to call that takes no arguments
:
struct Obligation {
var date = Date()
private var blank:Bool = false
}
let snapshotEntry = Obligation(date: Date())
Если я удалю private
из новой blank
переменной, она отлично компилируется.
Я упускаю из виду что-то простое здесь? Может ли struct
не иметь частного var?
Ответ №1:
Как четко указано в документации по контролю доступа:
Инициализатор memberwise по умолчанию для типа структуры считается закрытым, если какое-либо из сохраненных свойств структуры является закрытым. Аналогично, если какое-либо из сохраненных свойств структуры является закрытым файлом, инициализатор является закрытым файлом. В противном случае инициализатор имеет уровень доступа internal.
Просто используйте пользовательский инициализатор.
Ответ №2:
Вы не можете использовать элемент по умолчанию initialiser
для назначения struct's
свойства с private
модификатором уровня доступа.Если вам нужно назначить свое частное свойство с помощью initializer
, вы должны написать свое собственное или дать значение инициализации частного члена, чтобы разрешить это
Комментарии:
1. Я не пытаюсь присвоить частной собственности. Или вы имеете в виду мое значение по умолчанию? Отменяет ли это инициализатор всего элемента?
2. в инициализаторе… присвоите ей значение по умолчанию
Ответ №3:
Это должно сработать:
struct Obligation {
var date: Date
private var blank: Bool
init(date: Date = Date(), blank: Bool = false) {
self.date = date
self.blank = black
}
}
let snapshotEntry = Obligation(date: Date())