【问题标题】:Should I force-unwrap from a Framework?我应该从框架中强制解包吗?
【发布时间】:2017-07-30 21:57:23
【问题描述】:

我正在用 Swift 构建一个框架,但我不确定处理以下情况的正确方法。

let path = bundle.path(forResource: type.rawValue, ofType: "sks")!

如您所见,我正在强制解开 path(forResource:ofType:) 的结果。由于我正在编写框架我知道,我正在加载的文件将始终存在于包中。所以我不应该担心强制展开命令的危险。

但是...

...该框架将作为开源发布。

因此,从技术上讲,开发人员将能够(即使他们不应该)删除我正在加载的资源。在这种情况下,当然,前面的指令会使整个应用程序崩溃。

这就是我想知道的原因:我是否采用了正确的方法?我应该用guard 替换每个强制解包指令,以使框架“防黑客”吗?

【问题讨论】:

    标签: swift frameworks fatal-error forced-unwrapping


    【解决方案1】:

    归根结底,我想这是一个见仁见智的问题,但由于这个框架可能会被许多其他开发人员使用,我会尽量保证它的安全,并改用 guard 语句强制展开值。我认为您不希望您的框架无意中导致其他人的应用程序崩溃,并且该框架的用户不必担心您的框架会这样做。使用guard 不会造成任何伤害,因为资源应该始终存在,但万一它被意外删除,您总是可以在控制台上打印一些内容供开发人员阅读,或者抛出错误。

    enum ErrorHandler: Error {
        case resourceDoesNotExist
    }
    
    func getPath() throws -> String{
    
        guard let path = bundle.path(forResource: type.rawValue, ofType: "sks") else {
            throw ErrorHandler.resourceDoesNotExist
        }
        return path
    }
    

    这是一个非常基本的例子,但希望你能明白要点。如果您想了解更多,这里是用于错误处理的 Apple 文档:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2013-04-27
      • 2016-07-26
      • 2015-04-08
      • 1970-01-01
      • 2011-06-03
      • 2013-07-03
      相关资源
      最近更新 更多