我在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"
}
}
答案 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
枚举的范围。
您可能还需要错误检查分子和分母以确保它们存在。为了锻炼,我只是强行打开它们。