gpt4 book ai didi

swift - 如何快速实现自定义错误抛出语法?

转载 作者:行者123 更新时间:2023-12-03 07:46:27 33 4
gpt4 key购买 nike

我要实现以下内容:

throwingFunction()??.doStuff()
/* if throwingFunction throws an error:
print the error
else
returns an object with the doStuff() Method
*/
throwingFunction()??
/*
if an error is thrown,
prints the error.
else
execute the function without errors.
*/
我不确定要在 source code中查找有关如何实现 do, try, catch的示例的信息。 Swift error docs解释了如何使用已经实现的错误处理方法。明确地说,我想使用上述语法实现自定义错误处理。
就像是:
precedencegroup Chaining {
associativity: left
}

infix operator ?? : Chaining

extension Result {

// ERROR: Unary operator implementation must have a 'prefix' or 'postfix' modifier
static func ??(value: Result<Success, Failure>) -> Success? {
switch value {
case .success(let win):
return win
case .failure(let fail):
print(fail.localizedDescription)
return nil
}
}
}

最佳答案

您可以定义一个后缀运算符,该运算符将抛出闭包作为(左)操作数。 ??已经定义为中缀运算符,因此您必须选择其他名称:

postfix operator <?>

postfix func <?><T>(expression: () throws -> T) -> T? {
do {
return try expression()
} catch {
print(error)
return nil
}
}
现在你可以打电话
let result = throwingFunc<?>
或与
let result = (throwingFunc<?>)?.doStuff()

先前的答案: ??已经定义为中缀运算符。对于后缀运算符,您必须选择其他名称,例如:
postfix operator <?>

extension Result {
static postfix func <?>(value: Result) -> Success? {
switch value {
case .success(let win):
return win
case .failure(let fail):
print(fail.localizedDescription)
return nil
}
}
}
现在你可以打电话
let res = Result(catching: throwingFunc)<?>
或与
let res = (Result(catching: throwingFunc)<?>)?.doStuff()

关于swift - 如何快速实现自定义错误抛出语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62711205/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com