是否可以在闭包中使用可变参数?
Is it possible to use Variadic Parameters within Closures?
翻新问题
Swift:结合使用可变参数和闭包
是否可以使用可变参数进行闭包?
func this(_ hello: (Int...) -> ()) {}
func that(_ yeah: Int...) {}
这是有效的:this(that)
这是不起作用的:
this { foo in }
、this { _ in }
、this { }
我收到此错误:
Cannot convert value of type '(_) -> ()' to expected argument type '(Int...) -> ()'
我什至把Int...
都改成了Void...
我得到了相同的结果
附加警告
When calling this function in Swift 4 or later, you must pass a '()' tuple; did you mean for the input type to be '()'? Replace '(Void...)' with '()'
然而,将 Void... 替换为 ()... 就成功了
简化问题
let _: (()...) -> () = { _ in }
导致此错误:
Cannot convert value of type '(_) -> ()' to specified type '(()...) -> ()'
是否可以解决此问题?
您需要在闭包中包含类型:
this { (foo: Int...) in }
类型推理引擎不够强大,无法解决这种情况。我怀疑这与 SR-6030.
有关
翻新问题
Swift:结合使用可变参数和闭包
是否可以使用可变参数进行闭包?
func this(_ hello: (Int...) -> ()) {}
func that(_ yeah: Int...) {}
这是有效的:this(that)
这是不起作用的:
this { foo in }
、this { _ in }
、this { }
我收到此错误:
Cannot convert value of type '(_) -> ()' to expected argument type '(Int...) -> ()'
我什至把Int...
都改成了Void...
我得到了相同的结果
附加警告
When calling this function in Swift 4 or later, you must pass a '()' tuple; did you mean for the input type to be '()'? Replace '(Void...)' with '()'
然而,将 Void... 替换为 ()... 就成功了
简化问题
let _: (()...) -> () = { _ in }
导致此错误:
Cannot convert value of type '(_) -> ()' to specified type '(()...) -> ()'
是否可以解决此问题?
您需要在闭包中包含类型:
this { (foo: Int...) in }
类型推理引擎不够强大,无法解决这种情况。我怀疑这与 SR-6030.
有关