gpt4 book ai didi

swift - 为什么 Swift 在闭包函数中使用可选参数时会抛出错误?

转载 作者:行者123 更新时间:2023-11-28 15:25:52 24 4
gpt4 key购买 nike

有人可以解释为什么 swift 编译器会提示“offset:”参数,而这个参数无论如何都是可选的吗?

如果我将零作为参数 incrementByFive(0) 传递,那么它就可以工作。但是,当我在闭包定义中有一个默认值时,我为什么还要这样做呢……

code and its error image...这是代码:

func makeIncrementer(amount: Int) -> (Int?) -> Int {
var counter = 0

func incrementer(_ offset: Int? = 0) -> Int {
counter += amount + offset!
return counter
}

return incrementer
}


let incrementByFive = makeIncrementer(amount: 5)
incrementByFive()

最佳答案

在 Swift 中只有函数可以有默认参数,但不能有闭包。

makeIncrementer() 返回的闭包类型为(Int?) -> Int,即它接受一个 Int? 类型的参数,并且必须在调用闭包时提供。

也比较 SR-531 Allow default parameters in closure parameters ,特别是评论

Doesn't really make sense, if you need this behavior you should be using a function. Closures are usually called anonymously with their arguments all provided, so there is no need for default parameter values.

关于swift - 为什么 Swift 在闭包函数中使用可选参数时会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45258621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com