【发布时间】:2017-09-11 18:56:19
【问题描述】:
Swift func/closure 签名可以指定提供默认参数值吗?
我正在尝试做的一个高度简化的版本是这样的:
struct L {
typealias W = ((String, String, String) -> Void)
static func w(_ w:String, _ t:String = "t", _ f:String = "f") {
let line = w + t + f
print(line)
}
static let ws:[W] = [L.w, L.w]
}
L.ws[0]("sue", "seven", "red")
L.ws[0]("bill")
我在“bill”调用中得到的错误是:error: missing argument for parameter #2 in call
我尝试将 typealias 行更改为:
typealias W = ((String, String = "t", String = "f") -> Void)
但这在 typealias 行给我一个错误:error: default argument not permitted in a tuple type
这也无济于事:
typealias W = ((String, String?, String?) -> Void)
【问题讨论】:
-
Swift 不会自动生成带有默认参数的装饰函数的 thunk。即使你的 func
w有默认参数,它的类型仍然是(String, String, String) -> Void -
你到底想达到什么目的?
-
@Alexander 感谢您提供宝贵意见的帮助,但我不想参与关于此问题/答案的 XY problem 讨论。