【问题标题】:Optional try for function with no return value没有返回值的函数的可选尝试
【发布时间】:2017-06-04 16:49:22
【问题描述】:

会不会是当使用try?(可选尝试)来调用没有返回值的抛出函数时,错误会被忽略?

func throwingVoidFunction() throws { . . . }

try? throwingVoidFunction()

我预计编译器不允许在返回类型为 void 的抛出函数前面使用 try?,但编译器没有抱怨。

那么在 void 函数前使用try? 是一种吸收错误的方法吗? (例如使用空的默认捕获时:catch {})

【问题讨论】:

    标签: swift error-handling


    【解决方案1】:

    编译器没有理由抱怨。返回类型 的

    func throwingVoidFunction() throws { ... }
    

    是Void,因此是表达式的类型

    try? throwingVoidFunction()
    

    是Optional<Void>,如果在计算表达式时抛出错误,它的值为nil (== Optional<Void>.none), 否则Optional<Void>.some()。

    您可以忽略返回值或针对nil 进行测试。一个 示例在An elegant way to ignore any errors thrown by a method:

    let fileURL = URL(fileURLWithPath: "/path/to/file")
    let fm = FileManager.default
    try? fm.removeItem(at: fileURL)
    

    【讨论】:

    • 简单地忽略抛出的错误是不是很糟糕?
    • @user1364368:您通常是对的。在这种特殊情况下,最可能的错误是该文件不存在,您可能并不关心这一点。无论如何,这只是你所问的一个例子。
    • 还有一个关于简单忽略错误问题的漫画:commitstrip.com/en/2015/07/30/coders-weaknesses-1-the-trycatch
    • @user1364368:我无意建议您忽略错误。
    • @FadiAbuzant:它是如何“不起作用”的?编译器错误?运行时错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2015-10-05
    • 2011-06-06
    • 2014-02-27
    相关资源
    最近更新 更多