Сохраненное свойство без начального значения предотвращает синтезированные инициализаторы - PullRequest
0 голосов
/ 06 апреля 2020

Я объявляю протокол:

 protocol FullNameable {
        var fullName: String {get set}
    }

, затем принимаю вышеуказанный протокол для класса и структуры, как показано ниже:

struct LectureStruct: FullNameable {
    var fullName: String
}

class LectureClass: FullNameable {
    var fullName: String
}

Но для класса я получаю ошибку - Сохраненное свойство 'fullName 'без начального значения предотвращает синтезированные инициализаторы. Почему эта ошибка не для структуры?

1 Ответ

1 голос
/ 06 апреля 2020

Согласно документации swift :

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

let vga = Resolution(width: 640, height: 480)

В отличие от структур, экземпляры классов не получают элементный инициализатор по умолчанию.

В вашем случае вы можете создать экземпляр LectureStruct с помощью:

let lecture = LectureStruct(fullName: "Match Lecture")

Чтобы сделать то же самое с LectureClass, вам потребуется определить метод init следующим образом:

class LectureClass: FullNameable {
    var fullName: String

    init(fullName: String) {
        self.fullName = fullName
    }
}
...