gpt4 book ai didi

swift - 返回一个隐式解包的可选

转载 作者:搜寻专家 更新时间:2023-11-01 06:23:50 26 4
gpt4 key购买 nike

我正在用 Swift 编写一个程序,它具有各种函数,应该总是返回值,但在某些情况下不能,因此程序崩溃并警告用户错误。为了实现这一点,我使用隐式解包的 Optionals 作为我的函数的返回值,这样错误情况就可以只返回 nil(即使永远不会到达该代码)。它看起来像这样:

func giveMeAThing() -> Thing! {
if !possibleErrorCase() {
var thing = createAThingForSure()
return thing
}
else {
crashAndBurn()
return nil
}
}

写这个,感觉有点hacky,所以我的问题是这是否是在Swift中隐式解包Optionals的好用法。有没有更好的方法来构建我的代码来避免这种情况?

最佳答案

您可能缺少的拼图是@noreturn。如果您将函数声明为 @noreturn,如果您不履行周围的契约(Contract),编译器将放弃任何投诉。因此你可以调用这样的方法并且返回任何值,编译器也不会提示,因为它知道我们无论如何都会死。例如,fatalErrorabort 就是这样声明的。

因此,以下是合法的:

func f() -> String {
fatalError("oooooops")
}

即使我们未能履行返回值的契约,它也会编译,因为 @noreturn(在 fatalError 的声明中)撕毁契约并刷新碎片下厕所。

解决同一问题的另一种可能方法是使用 assert。如果不满足条件,这会为您崩溃和燃烧。因此,在您的示例中:

func giveMeAThing() -> Thing {
assert(!possibleErrorCase(), "gaaaaah!") // crash and burn if error case
return createAThingForSure()
}

缺点是默认情况下所有断言都会在发布的应用程序中成功。但这在开发过程中非常有用,毕竟您的交付应用程序无论如何都不应该崩溃和燃烧。

关于swift - 返回一个隐式解包的可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27992323/

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