首页 > 解决方案 > 在 Swift 的函数参数中强制展开是如何工作的?

问题描述

我有一个功能Swift

func getValue(param: String!) -> String {
    //access param
    //return a string
}

通话就像,

let retVal = getValue(param: nil)

我预计参数会在考虑函数参数并崩溃时尝试强制展开。但是代码没有崩溃。谁能让我知道我错过了什么?

在签名的情况下会有什么不同,

func getValue(param: String?) -> String

标签: iosswiftoptionalnullable

解决方案


!意味着参数将保存 String 值或nil. 因此,当您分配nil!它时,它不应该崩溃。但是当您尝试访问该值时,它会崩溃。

您的代码中的这种修改将导致崩溃,因为我们试图访问变量中的值是nil.

func getValue(param: String!) -> String {
    if param.isEmpty {
        return ""
    }
    return ""
}

let retVal = getValue(param: nil)

另一个例子:

var string: String!
string = nil //This will not crash, but after this line if you try to access or perform any operation on it, it will

现在关于这个func getValue(param: String?)

在这种情况下,paramoptional type与上述情况不同。所以在这里你必须打开它。


推荐阅读