swift – 返回抛出函数的值

swift – 返回抛出函数的值,第1张

概述我有一个非常简单的问题,但我只能在C线程中找到类似的答案.编译器抱怨getUserFromServer函数声明它需要返回值,即使它可以捕获异常.很明显为什么要求返回值,但我不确定如何正确处理这种情况. 一种方法是创建某种虚拟用户并返回它但它听起来没什么好处.另一种方法是使返回类型为Optional,但它只是将nil-checks的责任转移到另一个级别,这可能不是一个好主意.任何帮助都会有帮助. 这 我有一个非常简单的问题,但我只能在C线程中找到类似的答案.编译器抱怨getUserFromServer函数声明它需要返回值,即使它可以捕获异常.很明显为什么要求返回值,但我不确定如何正确处理这种情况.

一种方法是创建某种虚拟用户并返回它但它听起来没什么好处.另一种方法是使返回类型为Optional,但它只是将nil-checks的责任转移到另一个级别,这可能不是一个好主意.任何帮助都会有帮助.

这是一个模拟我在实际代码中期望的行为的设置.

enum TestError: Error {    case JustError}class User {}class ServerClIEnt {    func getUser(really: Bool) throws -> User {        var uza: User?        if really {            uza = User()        }        guard let user = uza else {            throw TestError.JustError        }        return user    }}func getUserFromServer() -> User {    let clIEnt = ServerClIEnt()    let user: User    do {        user = try clIEnt.getUser(really: true)        return user    } catch TestError.JustError {        print("just an error occured")    } catch {        print("something terrible happened")    }} //Error: missing return in a function
解决方法 所以想象一下我是调用者,我写了这行代码:

let user = getUserFromServer()print(user)

它以某种方式失败了.大.你想要发生什么?用户应该是什么?应该打印什么? (这里没有正确的答案;问题真的是你想要的是什么?)

如果您希望用户为nil,那么getUserFromServer应该返回User?.如果您希望用户成为某个默认用户,那么您需要一种方法来创建它.如果你想让调用者根本不打印(而是处理一些错误),那么getUserFromServer()应该抛出.如果您希望它崩溃,那么您需要在getUserFromServer中添加fatalError.这些都是有效的,但它必须做某事,而那些东西,取决于你.

也就是说,如果问题只是关于它应该是什么的建议,那么看看这段代码你应该默认使它成为一个可选项,除非你需要一些其他的行为.因为你已经“处理”了错误,所以这将是“正常”的事情.

总结

以上是内存溢出为你收集整理的swift – 返回抛出函数的值全部内容,希望文章能够帮你解决swift – 返回抛出函数的值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1006240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存