既然@autoclosure是参数声明的一部分,而不是类型,那么如何声明一个函数需要不同数量的自动闭包呢?
在此之前:
public func coalesce<T>(all : @autoclosure () -> T? ...) -> T? {
for f : () -> T? in all {
if let x = f() { return x }
}
return nil
}之后:?
发布于 2015-04-20 14:14:58
我打开了rdar://19782845,“SWIFT1.2: Variadic自动闭包不再受支持”,并得到了来自Apple Developer Relations的以下响应:
此问题的行为是基于以下几点: 只允许对函数类型的参数进行自动闭包,而varargs是一个数组。这是不可能的。
发布于 2021-09-23 10:55:46
您可以将参数包装为接受@autoclosure初始化的类型,例如:
public struct Arg<T> {
let f: () -> T?
init(_ f: @escaping @autoclosure () -> T?) {
self.f = f
}
}
public func coalesce<T>(all: Arg<T>...) -> T? {
for i in all {
if let x = i.f() { return x }
}
return nil
}
let a = 2
let c = coalesce(all: Arg(nil), Arg(a * 3), Arg(100)) // 6https://stackoverflow.com/questions/29750244
复制相似问题