Подтвердить что ты не робот

Инициализатор по умолчанию в быстром

Я создал быстрый класс со строковыми опциями (String?) и создал экземпляр класса в другом быстром файле и получил ошибку компиляции. Когда я создаю экземпляр класса внутри одного и того же файла, ошибки не возникает. Что-то не так, что я делаю? Я дважды проверял поведение, и это поведение согласуется даже с определением класса, приведенным в быстрой документации:

class ShoppingListItem {
    var name: String?
    var quantity = 1
    var purchased = false
}
var item = ShoppingListItem()

Отрывок из: Apple Inc. "Быстрый язык программирования". интерактивные книги. https://itun.es/in/jEUH0.l

Если var item = ShoppingListItem() выполняется в appDelegate.swift, из функции application:didFinishLaunchingWithOptions получаем ошибку:

<class> cannot be initialised because it has no accessible initializers

OTOH, если мы сохраняем экземпляр сразу после объявления класса, нет проблем.

Изменить: эта проблема не является showstopper, текущее поведение инициатора по умолчанию кажется непоследовательным или мне нужно лучше понять его

4b9b3361

Ответ 1

Скорее всего, это проблема с компилятором Swift и контролем доступа (не указывая пальцами, просто пытаясь устранить неполадки). Добавьте явный инициализатор в класс и посмотрите, работает ли это:

class ShoppingListItem {
    var name: String?
    var quantity = 1
    var purchased = false

    init() { }
}

Если это не сработает, установите класс public, а также инициализатор

    public class ShoppingListItem {
        var name: String?
        var quantity = 1
        var purchased = false

        public init() { }
    }

Ответ 2

Предоставление всем членам значения по умолчанию, в этом случае

var name: String? = nil

исправляет ошибку.

Ответ 3

Наследуйте свой класс от NSObject или любого другого класса, реализующего init()