首页 > 解决方案 > 我在操场上尝试“守卫”,但我得到了意想不到的结果

问题描述

我有代码(returning是一个函数)

该函数显然返回 nil,但不会触发 else 块。

var returns: String?
func returning() -> String {
    return nil
}

func nilTest() {
    guard returning != nil else {
        return
    }
    print(returning)
    print("Success")
}

输出:

(功能)

成功

标签: swift

解决方案


var returns: String?

func returning() -> String? {
    return nil
}

func nilTest() {
    /// Here you use function `returning` as a variable.
    /// Not its value
    guard returning != nil else {
        return
    }
    print(returning)
    print("Success")
}

问题是returning在您的代码中只是一个函数。不是函数的结果。它有一个函数类型() -> String?。不是一个String?

要解决此问题,请使用:

guard returning() != nil else {
    return
}

反而。

或者,这更明显:

let myString = returning()
guard myString != nil else {
    return
}

推荐阅读