我想为try / catch错误处理创建一个代码段:
static func tryCatch(block: (Void) -> Void) -> Any? {
var result: Any?
do {
result = try block()
}
catch let error as NSError {
print(error) //TODO: write error to log
}
return result
}
但是当我调用我的代码片段时,我从编译器中收到错误: 通话可以抛出,但没有标记为'尝试'并且没有处理错误
player = Common.tryCatch {
AVAudioPlayer(contentsOf: selectedSoundURL!)
} as? AVAudioPlayer
有没有办法重用try / catch代码,以便我不必编写相同的代码来记录我的错误?
答案 0 :(得分:1)
block
参数必须标记为throw
ing:
func tryCatch<T>(block: () throws -> T) -> T? {
do {
return try block()
} catch let error as NSError {
print(error)
}
return nil
}
使用泛型函数而不是Any
构成类型
演员多余。
正如@Hamish正确地说的那样,你仍然需要调用投掷功能
使用try
,例如
let player = tryCatch {
try AVAudioPlayer(contentsOf: selectedSoundURL!)
}
答案 1 :(得分:0)
表示您传入的块可以抛出:
func tryCatch(block: (Void) throws -> Void) -> Any? {