Swift:重复尝试捕获代码

时间:2017-02-28 20:24:47

标签: swift

我想为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代码,以便我不必编写相同的代码来记录我的错误?

2 个答案:

答案 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? {