我在do {行收到预期的声明错误。我尝试进行研究,并在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"
}
}
您的主要问题是您试图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
枚举的范围。
您可能还想对分子和分母进行错误检查,以确保它们存在。我只是为了练习而强行拆开它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句