Ric*_*edt 89 function optional swift
当我设置firstThing为默认值时,nil这将起作用,没有默认值nil我得到一个错误,即调用函数时有一个缺少的参数.
通过键入Int?我认为它使其成为可选的默认值nil,我是对的吗?如果是这样的话,为什么没有它= nil呢?
func test(firstThing: Int? = nil) {
if firstThing != nil {
print(firstThing!)
}
print("done")
}
test()
Run Code Online (Sandbox Code Playgroud)
Emi*_*aez 161
选项和默认参数是两个不同的东西.
可选是一个变量nil,就是它.
省略该参数时,默认参数使用默认值,此默认值指定如下:func test(param: Int = 0)
如果指定一个可选参数,则必须提供该参数,即使您要传递的值也是如此nil.如果您的函数看起来像这样func test(param: Int?),则不能像这样调用它test().即使参数是可选的,它也没有默认值.
您还可以将两者结合起来并使用一个参数,该参数采用可选的where nil默认值,如下所示:func test(param: Int? = nil).
Aar*_*sen 19
默认参数允许您在不传递参数的情况下调用函数.如果未传递参数,则提供默认参数.所以使用你的代码,这......
test()
Run Code Online (Sandbox Code Playgroud)
......与此完全相同:
test(nil)
Run Code Online (Sandbox Code Playgroud)
如果你省略这样的默认参数......
func test(firstThing: Int?) {
if firstThing != nil {
print(firstThing!)
}
print("done")
}
Run Code Online (Sandbox Code Playgroud)
......那你就不能再这样了......
test()
Run Code Online (Sandbox Code Playgroud)
如果这样做,您将收到您所描述的"缺失参数"错误.你必须每次都传递一个参数,即使那个参数只是nil:
test(nil) // this works
Run Code Online (Sandbox Code Playgroud)
nbl*_*oqs 16
Swift不像JavaScript这样的语言,你可以调用函数而不传递参数,它仍然会被调用.因此,要在Swift中调用函数,需要为其参数赋值.
参数的默认值允许您在调用函数时指定值而不指定它.这就是test()在test的声明中指定默认值时的原因.
如果您不包含该默认值,则需要在呼叫中提供值:test(nil).
此外,并没有直接与这个问题相关,但可能值得注意,你使用"C++"方式处理可能为空的指针,以处理Swift中可能的nil选项.以下代码更安全(特别是在多线程软件中),它允许您避免强制解包可选:
func test(firstThing: Int? = nil) {
if let firstThing = firstThing {
print(firstThing)
}
print("done")
}
test()
Run Code Online (Sandbox Code Playgroud)
如果您需要使用布尔参数,则只需分配默认值即可。
func test(WithFlag flag: Bool = false){.....}
Run Code Online (Sandbox Code Playgroud)
那么你可以不带或带参数使用:
test() //here flag automatically has the default value: false
test(WithFlag: true) //here flag has the value: true
Run Code Online (Sandbox Code Playgroud)
您正在将Optional默认值混为一谈。一个Optional接受一个值或零。具有默认值允许在调用函数时省略参数。参数可以是默认值,带或不带Optional类型。
func someFunc(param1: String?,
param2: String = "default value",
param3: String? = "also has default value") {
print("param1 = \(param1)")
print("param2 = \(param2)")
print("param3 = \(param3)")
}
Run Code Online (Sandbox Code Playgroud)
带输出的示例调用:
someFunc(param1: nil, param2: "specific value", param3: "also specific value")
param1 = nil
param2 = specific value
param3 = Optional("also specific value")
someFunc(param1: "has a value")
param1 = Optional("has a value")
param2 = default value
param3 = Optional("also has default value")
someFunc(param1: nil, param3: nil)
param1 = nil
param2 = default value
param3 = nil
Run Code Online (Sandbox Code Playgroud)
总结一下:
Optional可能为nil或可能包含Type的实例Optional具有默认值,则可以将其从函数调用中省略,或者可以将其包括在内,并可以为其提供nil值(例如,param1:nil)