如果这个问题对你来说很傻,很抱歉。我需要从power函数捕获溢出异常。我不能使用
do {
try pow(3, 100)
}
catch {
.....
}
Xcode显示pow
没有throws
的警告。如果我从代码中删除单词try
,那么Xcode就会显示catch不可访问的警告。
知道可以用什么吗?
不能对不抛出的函数使用错误处理,因此try
或do/catch
的任何组合都不能在中工作
在这种情况下,您可以检查函数是否返回像这样的有效数字
let value = pow(3, 1000)
if value.isNaN {
//throw error or other error handling
}
如果您喜欢,可以将pow转换为抛出函数:
enum NumericError: Error {
case notANumber
case infiniteNumber
}
func throwingPow(_ x: Decimal, _ y: Int) throws -> Decimal {
let v = pow(x, y)
if v.isInfinite {
throw NumericError.infiniteNumber
}
if v.isNaN {
throw NumericError.notANumber
}
return v
}
do {
try throwingPow(3, 100)
}
catch {
print(error)
}
这并不意味着所有可能的例外,只是一个例子。如果你想强迫呼叫者将所有这些奇怪的情况视为错误,那么将其作为投掷功能有助于提高呼叫现场的人体工程学。
您可以从pow中获得NaN和无限值,例如:
let i = pow(Float.infinity, 1)
i.isNaN // false
i.isInfinite // true
let n = pow((0 / 0), 1)
n.isNaN // true
n.isInfinite // false