Ios Swift:在方法中返回和传递可选值

Ios Swift:在方法中返回和传递可选值,ios,swift,optional,Ios,Swift,Optional,我在Swift中实现了UITableView,并将其与Objective-C进行了比较 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)i

我在Swift中实现了
UITableView
,并将其与Objective-C进行了比较

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
我从Swift返回一个未包装的可选文件。如果我知道返回的是非nil可选的,那么为什么返回类型是可选的呢?我还将uitableview作为未包装的可选项传递。同样的智慧也适用


如果我返回一个可选值,并用问号表示我不知道返回的是值还是nil,这是有意义的。。但我不理解这个具体案例,这只是与Objective-CAPI接口的问题。任何对象引用都可能是nil,Swift需要表示这一事实,因此需要一个可选的。但是通过使用隐式展开的可选项,Swift使您不必担心它是可选项;你可以把它看作是被可选的东西包裹着,让斯威夫特为你担心过桥

让我们分别来看这些案例:

返回值

这里可以传递nil,因为任何对象引用都可以是nil。因此,返回值被键入为未包装的可选值。实际上,您只需传递表格视图单元格对象

传入的表视图


它可能是nil,因为任何对象引用都可能是nil,但事实上,您知道它不会是。它是隐式展开的,所以实际上可以将其用作表视图

假设您没有实现此方法,而是在Objective-C中定义的类上调用它。Objective-C类可能返回
nil
,因此协议定义必须反映这一点。即使在Swift中,您可以保证您的方法永远不会返回nil,但在仍然符合协议的情况下,您不能有不同的返回类型


如果您只是在Swift的上下文中编写自己的协议,那么为了增加安全性,您完全可以删除可选协议。

并且您可以使用闭包作为可选参数的默认值。