如何解释Swift函数声明?

时间:2018-07-19 20:07:26

标签: ios swift uitableview syntax

我对此声明有疑问

Log4net context properties

RollingFileAppender是范围吗?

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> ... <file type="log4net.Util.PatternString" value="D:\Medupi logs\%property{appIdentifier}.log" /> ... </appender> 是声明方法/功能的关键字吗?

internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 是方法的名称吗?

什么是internal?这是参数的名称吗?如果是这样,假设func也是一个名称,为什么tableView没有下划线时为什么需要下划线?

_tableView是参数类型吗?

cellForRowAt是参数类型吗?

cellForRowAt中的UITableView是什么?为什么有两个字?

IndexPath是返回类型,对吧?

很困惑,非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

  

internal是范围吗?

这是访问修饰符。这意味着只有同一模块中的代码才能看到/调用此符号。

internal是隐式的(如果不设置),其含义主要是在创建框架时-链接框架的应用只能看到框架的public符号,但其中的代码框架可以在框架中看到其他internal符号。 (而且框架中一种类型的代码看不到另一种类型内的private符号。)

  

func是声明方法/功能的关键字吗?

是的。在Swift中,“方法”只是在类型(类,结构,协议,枚举)的范围内声明的func功能。

  

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是参数类型吗?

是的

  

indexPath中的cellForRowAt indexPath是什么?为什么有两个字?

cellForRowAt参数标签indexPath是参数(在您的实现中)的内部名称。

调用函数的任何人都使用参数标签,例如呼叫站点如下:

let cell = tableView(myTableView, cellForRowAt: selectedIndexPath)

参数名称是在函数体内引用该值的方式:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    ...
    self.doSomethingWithCellData(indexPath)
    ...
}
  

UITableViewCell是返回类型,对吧?

对。如果您在此方法的实现中未包含return语句,或者未包含return的任何内容UITableViewCell,则编译器会感到沮丧。

答案 1 :(得分:1)

您对internalfunctableView是正确的。有下划线是因为调用该函数时不必包括参数名称。您可以这样做:

tableView(myTableView, cellForRowAt: someIndexPath)

代替:

tableView(tableView: myTableView, cellForRowAt: someIndexPath)

UITableView是与IndexPath相同的参数类型。调用函数时(如上所示),您使用第一个单词cellForRowAt,但是在内部该函数将使用indexPath。调用该函数时,这两个词是为了便于阅读。 UITableViewCell是返回类型。