Swift中如何为使用匿名闭包参数的map显式指定返回值?
关于Swift中map闭包显式指定返回类型的问题
哈哈,这个细节我刚上手Swift的时候也纠结过!你遇到的报错其实是因为显式指定闭包返回类型时,必须明确写出闭包的参数部分,哪怕你想用$0这种匿名参数,也得先给编译器一个“提示”。
正确的写法有这几种:
- 保留
$0匿名参数,补上参数占位和in关键字:
array.map { $0 -> String in return $0.description }
如果是单表达式闭包,还能省略return,更简洁:
array.map { $0 -> String in $0.description }
- 给参数命名的写法(可读性更强):
array.map { element -> String in return element.description }
为什么你原来的写法会报错?
你写的array.map { -> String return $0.description }缺少了闭包语法里的参数声明部分和in关键字。Swift闭包的完整语法结构是:
{ (参数列表) -> 返回类型 in 代码体 }
当你省略参数列表时,Swift可以通过上下文推断参数,但一旦你显式指定了返回类型,就必须完整写出参数相关的部分——要么用$0占位(相当于告诉编译器“这个闭包有一个参数,我用$0指代它”),要么给参数起个名字,然后用in把返回类型和代码体分隔开。
你说的没错,大多数情况下Swift的类型推断足够聪明,不需要显式指定返回类型,但如果就是要写出来,就得遵循这个语法规则啦~
内容的提问来源于stack exchange,提问作者Trevor Freeman
相关产品推荐
相关产品推荐

