【问题标题】:Swift: returning and passing optional values in a methodSwift:在方法中返回和传递可选值
【发布时间】:2014-07-16 19:15:41
【问题描述】:

我在 Swift 中实现 UITableView 并将其与 Objective-C 对应项进行比较。

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

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

从 Swift 我返回一个未包装的可选。如果我知道我正在返回一个非 nil 可选,那么为什么返回类型是可选的呢?我还将 uitableview 作为未包装的可选项传递。同样的道理也适用。

如果我返回一个可选项并使用问号表示我不知道我返回的是一个值还是 nil 是有道理的。但我不明白这个具体情况

【问题讨论】:

    标签: ios swift optional


    【解决方案1】:

    这只是与 Objective-C API 接口的问题。任何对象引用可能为 nil,Swift 需要表达这一事实,因此需要一个 Optional。但是通过使用隐式展开的 Optional,Swift 让您不必担心它是一个 Optional 的事实。你可以把它当成 Optional 包裹的东西,让 Swift 替你操心过桥。

    让我们分别对待不同的情况:

    返回值

    可能在这里传递 nil,因为 any 对象引用可能是 nil。所以返回值是 typed 作为一个未包装的可选项。实际上,您只需传递表格视图单元格对象。

    传入的表格视图

    可能为nil,因为any对象引用可能为nil,但事实上你知道它不会。它为您隐式展开,因此实际上您可以将其用作表格视图。

    【讨论】:

    【解决方案2】:

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

    如果您只是在 Swift 的上下文中编写自己的协议,那么您绝对可以放弃可选的以增加安全性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多