如何捕获并记录所有错误?

时间:2015-09-25 23:01:43

标签: swift

我正在使用某些第三方功能,我不知道它们可以产生哪些类型的错误。

我想捕获并记录所有此类错误,但ErrorType协议没有任何可以提供有意义的消息或错误代码的成员。如何正确记录任何类型的错误?

do {
    try someFunction() 
} catch WellKnownError { // handle it }
} catch let err {    
    let message = ... // how can I get error type and some meaningful message from err?
    NSLog(message)    
}

1 个答案:

答案 0 :(得分:0)

我认为这不是一个选择...

但你可以尝试这样的事情......

//----------------------------------------
// Private API
//----------------------------------------

public enum CarError : ErrorType
{
    case NeverTurnOn
    case OutOfFuel
    case Other(String)
}

public class Car
{

    public func turnOn(newState:Int) throws -> Bool
    {

        if newState == 1
        {
            throw CarError.NeverTurnOn
        }
        else if case 2...5 = newState
        {
            throw CarError.OutOfFuel
        }
        else if newState == 10
        {
            throw CarError.Other("Something is gonna wrong")
        }
        else if newState == 11
        {
            throw CarError.Other(":(")
        }

        return false
    }

}

错误处理

func main()
{

    let car = Car()

    do {
        try car.turnOn(4)
    } catch CarError.NeverTurnOn {
        print("Turn off")
    } catch let err as NSError {
        print(err.description)
    } catch {
        print("It's madness!!!")
    }

}

main()

通过这个测试...我得到了这个结果......

//Error Domain=trycatchtest.CarError Code=1 "The operation couldn’t be completed. (trycatchtest.CarError error 1.)"
//Program ended with exit code: 0

这不是解决问题的最佳方法,而是了解此框架背景中发生的事情的新方法。

现在,请求帮忙。

请告诉我最后的结果;)

如果结果好或坏,这并不重要。