【发布时间】:2014-06-14 16:48:47
【问题描述】:
像许多人一样,我正在从 Apple 学习新的 Swift 语言,通过教程我遇到了一个创建通用堆栈的示例。这是该示例中的 pop 函数...
mutating func pop() -> T {
return elements.removeLast()
}
我决定将此实现扩展为在元素数组为空时不弹出,但作为 Swift 新手,我不确定如果堆栈为空时返回什么。
mutating func pop() -> T {
if !elements.isEmpty {
return elements.removeLast()
} else {
// return nothing?
}
我的问题是在 Swift 中最好的方法是什么
【问题讨论】:
-
如果堆栈为空,我假设 removeLast 会给您
nil,而这正是您在堆栈为空时应该返回的内容,因此不需要 if-else 语句。 -
@LordZsolt:实际上,我认为在数组为空时使用
removeLast是运行时错误。在 Swift 中,不能将类型(在这种情况下为T)设置为nil。只有类型“可选 T”(T?) 可以包含nil。如果此代码编译,removeLast必须返回T而不是T?,因为T?不能以这种方式隐式转换为T。 -
@AlvinThompson 抱歉,没有花足够的时间在 Swift 上……我要考试了……
-
@LordZsolt:我不得不承认,Swift 似乎是一种设计良好的语言。不过,我们将看看该评估是否会随着时间的推移而成立。 :)
-
@AlvinThompson 我可能会被标记为偏离主题的评论,但我已经阅读了 Swift 书中的几页 (50-100) 页,我也有点喜欢它。虽然 Haskell 风格的返回语法让我毛骨悚然,因为我将它与 Clean (另一种函数式编程语言,如 Haskell,但地球上的其他人除了我们的老师之外使用它)联系起来,这对我来说是很多挫折的根源.
标签: swift