return nil和return是否可以互换?

时间:2019-07-08 10:49:44

标签: swift

我不完全了解,我可以互换使用returnreturn nil吗? returnreturn nil的返回类型是否相似?

这是代码的两个实例。

第一个实例:

func naming(name: Int) -> String? {
    switch name {
        case 0: return "Neo"
        case 1: return "Matrix"
        default: return nil
    }
}
naming(name: 2)   // nil

第二个实例:

guard let video = try? avplayer else {
    print("Unable to load a movie")
    return
}

3 个答案:

答案 0 :(得分:3)

没有两个都不一样!

return,不带任何参数,返回Voidreturn语句的这种形式只能与返回Void的函数一起使用。

执行return语句后,该函数将退出,并且您的函数中没有其他代码将执行。

答案 1 :(得分:2)

不,他们不一样。

当您需要返回一个值但该值可以是可选的时,使用返回nil。因此,在您的示例中:

func naming(name: Int) -> String? {
    switch name {
        case 0: return "Neo"
        case 1: return "Matrix"
        default: return nil
    }
}

该函数期望返回Stringnil值,因此返回String?。末尾的问号表示String是可选的。当您调用naming(name: 2)语句时,调用switch语句并没有找到与数字2相对应的值,因此默认情况下将返回nil

像在第二个示例中那样放置return只是使其余函数无法执行。所以:

function loadVideo() {
    guard let video = try? avplayer else {
        print("Unable to load a movie")
        return
    }
    print("hello")
}

如果avplayer变量为nil,则guard语句将执行其else语句并从函数中先打印出Unable to load a movie,然后打印出return。这将防止打印hello

答案 2 :(得分:2)

Kurt,您好,您显然是编程新手,尤其是

您问题的简单答案是否

在您的示例中

func naming(name: Int) -> String? /* reference */ {
    switch name {
        case 0: return "Neo"
        case 1: return "Matrix"
        default: return nil
    }
}

/ *参考* / 您应该返回可选的字符串,这里可以是字符串值或nil 如果您决定只返回无值,则会出现编译错误

  • 在第二个示例中,我想让您想象这是一个无效函数,可以更清楚地了解它
func naming(name: Int) {
    switch name {
        case 0: return "Neo" /* reference */
        case 1: return "Matrix" /* reference */
        default: return nil /* reference */
    }
}

如果您尝试从该函数返回任何值,并且应该在任何时候返回没有任何值,这取决于您的业务,您将在/ *参考* /上遇到编译错误

  • 因此,为了安全起见,请考虑让出防护是一个无效函数,swift会为您检查该值是否具有值,这将使值/ * video * /在下一行可用,否则它将从该函数返回并不执行其余功能代码