说我调用 map
像这样,使用匿名闭包参数 $0
:
array.map {
return $0.description
}
我将如何明确定义该 map 返回
string
?这不起作用:array.map { -> String
return $0.description
}
Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored
这是否意味着如果我想指定一个返回值,我必须命名我的参数?
[编辑:我知道我在这里不需要明确的返回类型;仍然想如何指定一个]
最佳答案
您可以使用 as
识别匿名外壳的类型。在这种情况下,您还需要指定输入的类型:
let result = array.map({ $0.description } as (CustomStringConvertible) -> String)
注:您可以使用
array
中的任何类型作为输入类型。这里我只使用了CustomStringConvertible
协议(protocol),因为这是访问 .description
所需要的。属性(property)。或者正如您所提到的,如果您为输入参数命名,则可以指定输出类型:
let result = array.map { value -> String in value.description }
另一种看待它的方式是注意
map
返回 Array
map
的任何类型关闭返回。您可以指定映射的结果是 [String]
然后 Swift 会推断出 map
关闭返回 String
:let result = array.map({ $0.description }) as [String]
或者
let result: [String] = array.map { $0.description }
关于swift - 在 Swift 中,如何使用匿名闭包参数显式指定 map 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60304253/