«Аргумент передан в call, который не принимает аргументов» при создании объекта - PullRequest
1 голос
/ 19 марта 2019

У меня ошибка при использовании класса Swift.Когда я пытаюсь создать новый объект, подобный этому

let prod_obj = Produs(nume: nume_prod, cod_bare: cod_ext)

, я получаю сообщение об ошибке «Аргумент передан в вызов без аргументов», и я не знаю почему.Я прочитал несколько документов, и это точно так же, как они это делают.Вот как выглядит мой класс:

class Produs {
    var nume: String!
    var cod_bare: String!
}

Я думаю, что мне может понадобиться добавить инициализатор, но я не понимаю, почему это необходимо в моем случае.

Ответы [ 3 ]

2 голосов
/ 19 марта 2019

Из главы Структуры и классы книги Swift:

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

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

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

В вашем классе нет инициализатора, кроме стандартного по умолчанию, без параметров.

Либо добавьте необходимый инициализатор с двумя параметрами, либо измените свой классв структуру.

2 голосов
/ 19 марта 2019

Вы можете получить синтезированный init, используя Struct, например,

struct Produs {
    let nume: String
    let codBare: String
}
let prodObj = Produs(nume: numeProd, codBare: codBare)

Для класса вы предоставляете инициализатор:

class Produs {
    var nume: String
    var codBare: String

    init (nume: String, codBare: String) {
        self.nume = nume
        self.codBare = codBare
    }
}
let prodObj = Produs(nume: numeProd, codBare: codBare)

или

class Produs {
    var nume: String!
    var codBare: String!
}

let prodObj = Produs()
prodObj.nume = numeProd
prodObj.codBare = codBare

Примечание. Избегайте использования подчеркивания в именах переменных, используйте camelCase, например codBare

0 голосов
/ 19 марта 2019

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

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