我应该从框架强制解包吗?

时间:2017-07-30 21:57:24

标签: swift frameworks fatal-error forced-unwrapping

我正在使用Swift构建一个Framework,我不确定处理以下场景的正确方法。

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

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

然而...

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

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

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

1 个答案:

答案 0 :(得分:0)

在一天结束时,我认为这是一个意见问题,但由于此框架可能会被许多其他开发人员使用,我会尝试尽可能保持安全并使用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