在 Swift 中,如何使用匿名闭包参数显式指定映射的返回值?

Tre*_*man 8 dictionary arguments return swift

假设我map像这样调用,使用匿名闭包参数$0

\n\n
array.map {\n  return $0.description\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我如何明确定义该映射返回 a string?这不起作用:\xe2\x80\x99:

\n\n
array.map { -> String\n  return $0.description\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

闭包参数列表的上下文类型需要 1 个参数,不能隐式忽略该参数

\n
\n\n

这是否意味着如果我想指定返回值,我必须命名我的参数?

\n\n

[编辑:我知道我在这里不需要显式返回类型;还是想知道如何指定一个]

\n

vac*_*ama 8

您可以使用它as来识别匿名机箱的类型。在这种情况下,您还需要指定输入的类型:

let result = array.map({ $0.description } as (CustomStringConvertible) -> String)
Run Code Online (Sandbox Code Playgroud)

注意: 您可以使用其中的任何类型array作为输入类型。在这里我只使用了CustomStringConvertible协议,因为这是访问该属性所需要的.description

或者正如您所提到的,如果为输入参数指定名称,则可以指定输出类型:

let result = array.map { value -> String in value.description }
Run Code Online (Sandbox Code Playgroud)

另一种看待它的方法是注意map返回闭包返回Array的任何类型map。你可以指定映射的结果是[String],然后 Swift 会推断map闭包返回String

let result = array.map({ $0.description }) as [String]
Run Code Online (Sandbox Code Playgroud)

或者

let result: [String] = array.map { $0.description }
Run Code Online (Sandbox Code Playgroud)