Общий ответ: передайте указатель на вещь, которую вы хотите изменить.
В этом случае это будет указатель на указатель, который вы хотите изменить.
Предполагая, что StudentList
является классом, то есть
class StudentList {
func allStudents ()-> [String]{
....
}
}
Тогда выражение, подобное этому
var all = StudentList.allStudents()
, сгенерирует указанное исключение, потому что allStudents
применяется к классу, а не к экземпляру класса. Функция allStudents
ожидает параметр self
(ссылка на экземпляр). Это объясняет сообщение об ошибке.
Это будет решено, если вы сделаете
var all = StudentList().allStudents()
У 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
является методом типа, класс (или структура) не нужно сначала инициализировать.
См. Также