internal是作用域?
这是一个访问修饰符。这意味着只有同一模块中的代码才能看到/调用这个符号。
internal 是隐含的,如果你不使用它,它主要在你制作框架时有意义——链接框架的应用程序只能看到框架的 public 符号,但框架内的代码可以看到其他internal 框架中的符号。 (并且框架中一种类型的代码在另一种类型中看不到private 符号。)
func是声明方法/函数的关键字?
是的。在 Swift 中,“方法”只是在类型(类、结构、协议、枚举)范围内声明的 function。
tableView是方法的名字?
是的……在某种意义上。它通常被称为函数/方法的“基本名称”——开括号 ( 之前的部分。该方法的全名(人们在试图明确地引用此方法与其他方法时使用)包括所有参数标签:tableView(_:cellForRowAt:)。 (不过,在 Swift 中,即使是全名也不是明确的,因为函数/方法可以在参数/返回类型上重载。)
通常,函数名称是一个动词短语,描述函数执行的操作或表征结果,但在委托/数据源协议中另有一个长期约定。 (并且此方法来自UITableViewDataSource 协议。)在此类协议中,函数的“基本名称”用于命名委托某些操作的对象。
_tableView 是什么?这是参数的名称吗?如果是这样,假设cellForRowAt 也是一个名称,为什么cellForRowAt 没有下划线,我们还需要下划线?
不是_tableView,而是_ tableView——注意空格。 The underscore generally means "ignore this" in Swift. 在这种情况下,下划线代替了参数标签,这意味着该方法的调用者不会为第一个参数写一个:
let cell = tableView(myTableView, cellForRowAt: selectedIndexPath)
^ nothing here, just the value being passed as an argument
UITableView 是参数类型吗?
IndexPath是参数类型吗?
是的。
cellForRowAt indexPath 中的 indexPath 是什么?为什么有2个字?
cellForRowAt 是一个参数标签。 indexPath 是参数的内部(对于您的实现)名称。
参数标签由调用你的函数的人使用——例如一个这样的呼叫站点如下所示:
let cell = tableView(myTableView, cellForRowAt: selectedIndexPath)
参数名称是您在函数体内引用该值的方式:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
self.doSomethingWithCellData(indexPath)
...
}
UITableViewCell 是返回类型,对吧?
没错。如果您在此方法的实现中未包含 return 语句,或 return 任何不是 UITableViewCell 的内容,编译器会感到不安。