在swift中映射一个投掷函数——双击
一个很小的问题。当我尝试在Swift中映射抛出函数时,编译器会让我使用try关键字两次。以玩具为例:在swift中映射一个投掷函数——双击,swift,error-handling,higher-order-functions,Swift,Error Handling,Higher Order Functions,一个很小的问题。当我尝试在Swift中映射抛出函数时,编译器会让我使用try关键字两次。以玩具为例: public func combineFiles(files: [String]) throws -> String { let strings = try files.map { try String(contentsOfFile: $0) } return strings.joined(separator: "\n\n") } 第二行中的两个try关键字似乎都是编译该
public func combineFiles(files: [String]) throws -> String {
let strings = try files.map { try String(contentsOfFile: $0) }
return strings.joined(separator: "\n\n")
}
第二行中的两个try关键字似乎都是编译该文件所必需的。但我觉得这是大错特错了——有没有一种方法可以不用第二次尝试就完成这种操作 从技术上讲,如果避免调用
map
,您可以使用一个try
:
func combineFiles(files: [String]) throws -> String {
var results: [String] = []
for file in files {
results.append(try String(contentsOfFile: file))
}
return results.joined(separator: "\n\n")
}
但我认为这是错误的方向。我只想采用这两种模式,即重新调用map
等函数
我会丢失字符串
,不过:
func combineFiles(files: [String]) throws -> String {
try files.map { try String(contentsOfFile: $0) }
.joined(separator: "\n\n")
}
contentsOfFile
可以抛出。因此需要尝试一下。你没有抓住机会。因此,它渗透了。所以现在map
可以抛出。因此需要尝试一下。否则,如果一个contentsOfFile
失败会发生什么?如果您查看map的声明,您会发现这是写在中的:它所使用的函数可以完全一致地抛出,因为map会重新抛出。谢谢。我想我只需要重新校准我对代码气味的感觉:-)