do {line使用Swift 3

时间:2016-09-29 20:52:10

标签: swift

我在do {line处收到了预期的声明错误。我已经尝试过研究这个并在try / catch语句中阅读Swift 3的Apple开发人员信息,但是无法解决这个问题。

以下是代码:

class Calculator: ViewController {

    var display = "0"
    var numerator : Float?
    var denominator : Float?
    var total : Float?


    enum divisionErrors: Error {
        case inf
        case nan
    }

    func divide(num: Float, by denum: Float) throws -> Float {
        guard num != 0 else{throw divisionErrors.nan}
        guard denum != 0 else{throw divisionErrors.inf}

        let computedValue = num / denum
        return computedValue
    }

    do {

        catch divisionErrors.inf {print("Error")}
        display = "0"

        catch divisionErrors.nan {print("Error")}
        display = "0"
    }
}

1 个答案:

答案 0 :(得分:1)

您的主要问题是您尝试在类的主体中使用do语句,而它应该只在函数体中。为了论证,我将其放在viewDidLoad方法中。

class Calculator: UIViewController {

    var display = "0"
    var numerator : Float?
    var denominator : Float?
    var total : Float?


    enum divisionErrors: Error {
        case inf
        case nan
    }

    func divide(num: Float, by denum: Float) throws -> Float {
        guard num != 0 else{throw divisionErrors.nan}
        guard denum != 0 else{throw divisionErrors.inf}

        let computedValue = num / denum
        return computedValue
    }

    override func viewDidLoad() {

        do {
            try total = divide(num: numerator!, by: denominator!)

        } catch divisionErrors.inf {
            print("Error")
            display = "0"
        } catch divisionErrors.nan {
            print("Error")
            display = "0"
        } catch {
            assert(false, "Other Error")
        }
    }
}

换句话说,当你do某事时,你还必须try做一些可能失败的事情。然后,关闭错误的do语句,关闭catch。与switch声明一样,您的catch个案必须详尽无遗。在尝试编译时,如果没有最终catch将剩余的可能错误四舍五入,则会出现错误,因为潜在错误超出了divisionErrors枚举的范围。

您可能还需要错误检查分子和分母以确保它们存在。为了锻炼,我只是强行打开它们。