override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let row = indexPath.row
let meal = meals[row]
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: nil)
cell.textLabel!.text = meal.name
return cell
}
Quebrando o código linha por linha, temos:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
Aqui, o override func
nos diz que estamos sobrescrevendo uma função chamada tableView(cellForRowAt:)
que devolve um UITableViewCell
.
No iOS, quando criamos uma função, podemos definir o nome que será usado internamente do argumento e seu nome que será visto por quem chamar. Veja:
func divide(numerador num1: Double, por num2: Double) -> Double {
return num1/num2
}
Veja que internamente usamos num1
e num2
. Porém, para chamar a função devemos usar os nomes externos dos argumentos, assim:
divide(numerador: 10, por: 3)
Vamos à segunda linha:
let row = indexPath.row
Recebemos esse indexPath
como argumento da função que sobrescrevemos e esse argumento possui informações (como row
e section
) da linha que será construída pelo tableView. Como nosso tableView tem apenas uma section
, só a row
nos interessa. Guardamos numa constante chamada row
.
let meal = meals[row]
meals
é um array. Como queremos colocar a refeição 0 na linha 0 do tableView (e assim por diante), usamos a nossa constante row
como posição para buscar a refeição correspondente. Guardamos numa outra constante chamada meal
.
Agora sabemos qual é a refeição (meal
) que deverá ser exibida, mas ainda não temos o layout da linha que exibirá essa refeição.
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: nil)
É justamente isso que é feito aqui: instanciamos uma linha (UITableViewCell
) com um layout padrão do iOS (esse UITableViewCellStyle.default
) e chamamos ela de cell
. Neste momento, ela está em branco.
cell.textLabel!.text = meal.name
Como essa cell
foi instanciada com um layout padrão, ela já possui alguns campos prontos para serem populados. Um deles é chamado de textLabel
que é só um UILabel
comum.
Pegamos esse textLabel
e setamos seu texto (.text
) para ser o nome da refeição que deve aparecer na tela (meal.name
).
Por fim, retornamos essa cell já populada e pronta para ser exibida na tela:
return cell