Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何捕获并记录所有错误?_Swift - Fatal编程技术网

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

Swift 如何捕获并记录所有错误?,swift,Swift,我正在使用一些第三方函数,我不知道它们会产生什么类型的错误 我希望捕获并记录所有此类错误,但ErrorType协议没有任何成员可以提供有意义的消息或错误代码。如何正确记录任何类型的错误 do { try someFunction() } catch WellKnownError { // handle it } } catch let err { let message = ... // how can I get error type and some meaning

我正在使用一些第三方函数,我不知道它们会产生什么类型的错误

我希望捕获并记录所有此类错误,但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)    
}

我认为这不是一个选择

但是你可以试试这样的

//----------------------------------------
// 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
这不是解决问题的最佳方法,而是了解此框架背景下发生的事情的新方法

现在,请你帮个忙

请告诉我最后的结果;)


结果是好是坏并不重要。

我认为这不是一个选项

但是你可以试试这样的

//----------------------------------------
// 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
这不是解决问题的最佳方法,而是了解此框架背景下发生的事情的新方法

现在,请你帮个忙

请告诉我最后的结果;)

结果是好是坏并不重要