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

在Swift中,如何为带有匿名闭包参数的映射显式指定返回值?,swift,dictionary,return,arguments,Swift,Dictionary,Return,Arguments,假设我这样调用map,使用匿名闭包参数$0: array.map{ 返回$0.5说明 } 如何明确定义映射返回的字符串?这不起作用: array.map{->String 返回$0.5说明 } 闭包参数列表的上下文类型需要1个参数,不能隐式忽略 这是否意味着如果要指定返回值,就必须命名参数 [编辑:我知道这里不需要显式返回类型;仍然希望知道如何指定返回类型]如果类型是字符串,则会自动推断该类型,否则需要这样的强制转换 array.map { String($0.description) }

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

array.map{
返回$0.5说明
}
如何明确定义映射返回的
字符串
?这不起作用:

array.map{->String
返回$0.5说明
}
闭包参数列表的上下文类型需要1个参数,不能隐式忽略

这是否意味着如果要指定返回值,就必须命名参数


[编辑:我知道这里不需要显式返回类型;仍然希望知道如何指定返回类型]

如果类型是字符串,则会自动推断该类型,否则需要这样的强制转换

array.map { String($0.description) }

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

let result = array.map({ $0.description } as (CustomStringConvertible) -> String)
注意:您可以使用
数组中任何内容的类型作为输入类型。这里我只使用了
CustomStringConvertible
协议,因为这是访问
.description
属性所需要的

或者,如前所述,如果为输入参数指定名称,则可以指定输出类型:

let result = array.map { value -> String in value.description }

查看它的另一种方法是注意
map
返回
map
闭包返回的任何类型的
Array
。您可以指定映射的结果为
[String]
,然后Swift将推断
映射
闭包返回
字符串

let result = array.map({ $0.description }) as [String]


“这是否意味着如果要指定返回值,必须命名参数?”是的。或者,如果闭包只是一行,编译器将能够推断返回类型本身。描述不是字符串吗?
let result: [String] = array.map { $0.description }