像许多人一样,我正在学习Apple的新Swift语言,通过教程我遇到了一个创建通用堆栈的示例。这是该示例中的pop函数...
mutating func pop() -> T {
return elements.removeLast()
}
我决定将这个实现扩展为在element数组为空时不弹出,但是对Swift不熟悉我不确定如果堆栈为空则返回什么。
mutating func pop() -> T {
if !elements.isEmpty {
return elements.removeLast()
} else {
// return nothing?
}
我的问题是在Swift中执行此操作的最佳方式是什么
答案 0 :(得分:2)
这正是选项所适用的类型。 Optionals就像常规变量一样,除了它们有一个特殊情况要说,"没有分配值",所以不是返回类型" T",返回类型"可选T&# 34;:
mutating func pop() -> T? {
if !elements.isEmpty {
return elements.removeLast() // return the last item on the stack
} else {
return nil // indicate there was nothing on the stack
}
}
当然,使用此功能时,您必须检查是否有实际值。你可以用" if"声明或"如果让"构造。如果您在名为optionalItem
的var中有可选项,则可以使用if optionalItem { ... }
之类的内容。仅当optionalItem
具有值时,才会执行if
块中的代码。
"如果让"通过从您的可选项中检索项目,构造更进一步。做类似的事情:
if let item = myStack.pop() { // this implicitly unwraps the optional if present
// Do something. "item" is of type T, not T?
else {
// Nothing was on the stack. "item" is not defined
}
答案 1 :(得分:1)
func pop() -> T? {
if !elements.isEmpty {
return elements.removeLast()
} else {
// return nothing?
return nil
}
}