Отсутствует аргумент для параметра # 1 в ошибке вызова для функции без параметров. стриж

Общий ответ: передайте указатель на вещь, которую вы хотите изменить.

В этом случае это будет указатель на указатель, который вы хотите изменить.

23
задан Boid 21 August 2014 в 21:06
поделиться

2 ответа

Предполагая, что StudentList является классом, то есть

class StudentList {

    func allStudents ()-> [String]{
      ....
    }
}

Тогда выражение, подобное этому

var all = StudentList.allStudents() 

, сгенерирует указанное исключение, потому что allStudents применяется к классу, а не к экземпляру класса. Функция allStudents ожидает параметр self (ссылка на экземпляр). Это объясняет сообщение об ошибке.

Это будет решено, если вы сделаете

var all = StudentList().allStudents()
51
ответ дан Anthony Kong 21 August 2014 в 21:06
поделиться

У Swift есть методы экземпляра и методы типа. Метод экземпляра - это метод, который вызывается из определенного экземпляра класса. Метод Type - это статический метод, который вызывается из самого класса.

Методы экземпляра

Метод экземпляра будет выглядеть примерно так:

class StudentList {

    func allStudents() -> [String] {
      ....
    }
}

Для вызова метода allStudents необходимо инициализировать класс StudentsList первый.

let list = StudentsList() // initialize the class
let all = list.allStudents() // call a method on the class instance

Попытка вызова метода экземпляра для самого класса дает ошибку.

Методы типа

Методы типа являются статическими методами, которые принадлежат классу, а не экземпляру класса. Как упоминалось в комментариях к ответу @ AnthodyKong, метод Type можно создать с помощью ключевых слов class или static перед func. Классы передаются по ссылке, а структуры передаются по значению, поэтому они известны как ссылочный тип и тип значения. Вот как они будут выглядеть:

Тип ссылки

class StudentList {

    class func allStudents() -> [String] {
      ....
    }
}

Тип значения

struct StudentList {

    static func allStudents() -> [String] {
      ....
    }
}

] Вызовите с

let all = StudentList.allStudents()

Поскольку allStudents является методом типа, класс (или структура) не нужно сначала инициализировать.

См. Также

13
ответ дан Suragch 21 August 2014 в 21:06
поделиться