Struct Memberwise Initialization - пропуск значений для свойств со значениями по умолчанию - PullRequest
1 голос
/ 13 июня 2019

Я новичок в Swift и следую онлайн-документации. В частности, я смотрю на инициализацию (https://docs.swift.org/swift-book/LanguageGuide/Initialization.html).

В подзаголовке «Инициализированные по элементам для типов структуры» указано:

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

, а затем приводит пример:

struct Size {
    var width = 0.0, height = 0.0
}
let twoByTwo = Size(width: 2.0, height: 2.0)

let zeroByTwo = Size(height: 2.0)
print(zeroByTwo.width, zeroByTwo.height)
// Prints "0.0 2.0"

let zeroByZero = Size()
print(zeroByZero.width, zeroByZero.height)
// Prints "0.0 0.0"

Однако, если я пытаюсь это сделать, я получаю сообщение об ошибке при инициализации zeroByTwo:

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

Я что-то не так понял?

Я использую Swift 5.

1 Ответ

1 голос
/ 26 июня 2019

Вы цитировали руководство по языку программирования Swift Swift 5.1 .В руководстве по Swift 5 отсутствует весь этот абзац, потому что эта функция является новой для 5.1.

В Swift 5, поэлементный инициализатор включает в себя все сохраненные свойства безотносительно к значениям переменных по умолчанию, поэтому вы вынуждены включать каждыйАргумент при создании нового экземпляра (если вы не создаете свои собственные инициализаторы).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...