简单的堆栈示例,如果堆栈为空,如何返回?

时间:2014-06-14 16:48:48

标签: swift

像许多人一样,我正在学习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中执行此操作的最佳方式是什么

2 个答案:

答案 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
}
}