В вашей функции первое tableView
- это имя функции, второе - имя, присвоенное одному из ее параметров.
Простая функция может быть объявлена следующим образом:
- ключевое слово
func
- он дал название функции
- открывающая скобка
(
- имена параметров (если есть), каждое из которых следует за двоеточием
:
, а затем его тип, все разделены запятыми ,
- закрывающая скобка
)
Если эта функция возвращает значение, то:
- стрелка
->
, которая является просто - и >
- тип возврата
открывающаяся фигурная скобка {
- Вот тело вашей функции
- Если эта функция возвращает значение, используйте ключевое слово
return
, за которым следует значение, которое вы хотите вернуть.
- Наконец закрывающая скобка
}
Это определило бы подпись этой функции: что делает функцию из другой функции
- его имя,
- количество и названия его параметров и их типы,
- И его тип возврата.
(Мы могли бы добавить объект, которому он принадлежит, если он бросает или нет, ...)
Вот пример функции, которая принимает String
и возвращает другую. Вы можете попробовать это на детской площадке в Xcode:
//Declare the function
func sayHiTo(person: String) -> String {
let greeting = "Hello " + person
return greeting
}
//Invoke it
sayHiTo(person: "Sara") //"Hello Sara"
Вы видите, как мы вызывали функцию в последней строке: sayHiTo(person: "Sara")
? Для вызова функции выполните следующие действия:
- поставить название функции (аналогично
2.
из предыдущего списка)
- открывающая скобка
(
- имена параметров (если есть), за каждым из которых следует двоеточие
:
, а затем его тип.
Мы могли бы использовать _
перед именем параметра, если мы хотим вызвать функцию без указания параметра name:
func laugh(_ s: String) -> String {
return s + s
}
laugh("Ha") //HaHa
И ничто не пойдет не так, если имя параметра совпадает с именем функции:
func name(name: String) {
print(name)
}
name(name: "Katie") //prints Katie in the console
Теперь давайте посмотрим на сигнатуру этой функции:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
Как видите,
tableView
- название функции
- Второй
tableView
- это имя его первого параметра
- Подчеркивание
_
означает, что вам не нужно указывать имя параметра при вызове этой функции
UITableView
- это тип первого параметра
cellForRowAt
- это внешнее имя второго параметра
indexPath
- это внутреннее имя второго параметра
IndexPath
- тип второго параметра
-> UITableViewCell
означает, что эта функция возвращает экземпляр типа UITableViewCell
Вопрос, который вы можете задать: зачем использовать одно и то же имя функции и параметра? И ответ:
Это соглашение, что все источники данных работают в UITableViewDataSource
. Это легче запомнить и становится еще удобнее с функцией автозаполнения Xcode.
Кроме того, действительно полезно иметь ссылку на используемый вами tableView, и для этого параметра нет более понятного имени, чем tableView
.