Swift 风格:函数返回您需要的类型的可选类型以便继续,处理此问题的最佳实践是啥?

Posted

技术标签:

【中文标题】Swift 风格:函数返回您需要的类型的可选类型以便继续,处理此问题的最佳实践是啥?【英文标题】:Swift style: Function returns optional of type that you need in order to continue, what's the best practice to handle this?Swift 风格:函数返回您需要的类型的可选类型以便继续,处理此问题的最佳实践是什么? 【发布时间】:2016-02-20 19:11:43 【问题描述】:

首先,我将使用 cellForRowAtIndexPath 作为我的示例,因为 de-queue 函数返回一个可选项,并忽略显式解包是完全安全的事实。

我的问题是:什么被认为是“最佳”方式或风格来处理您调用返回可选的函数但您需要从此函数返回以继续操作的情况。我发现这个第一个 sn-p 非常笨拙和丑陋:

if let theCell = UITableView().dequeueReusableCellWithIdentifier("cell") 
    setUpCell(theCell)
    return theCell
   else 
    let theCell = UITableViewCell(style: .Default, reuseIdentifier: "cell")
    setUpCell(theCell)
    return theCell

另一种选择是:

let getNewCell =  return UITableViewCell(style: .Default, reuseIdentifier: "cell") 
let cell = UITableView().dequeueReusableCellWithIdentifier("cell") ?? getNewCell()
setUpCell(cell)
return cell

我们用 Swift 2 摆脱了条件可选绑定的塔,但我仍然发现缺乏一种优雅的方式来处理可选的而不用大括号。

【问题讨论】:

如果您的目标是删除大括号,那么不要将新单元格的创建包装在闭包中。另外,定义“优雅”。 【参考方案1】:

在这种情况下你可以写

var theCell = tableView.dequeueReusableCellWithIdentifier("cell")
if theCell == nil  theCell = UITableViewCell(style: .Default, reuseIdentifier: "cell") 
setUpCell(theCell)
return theCell

然而在这种情况下返回非可选的方法更可取

let theCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
setUpCell(theCell)
return theCell

并且还使用传递的UITableView 实例。

【讨论】:

以上是关于Swift 风格:函数返回您需要的类型的可选类型以便继续,处理此问题的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

关于swift中的可选类型

Swift 中的可选值是啥?

swift中的可选类型

Swift:Assert 语句中的可选元组类型

Swift函数式编程四(可选值)

Swift函数式编程四(可选值)