1

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

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

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

然而...

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

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

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

4

1 回答 1

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

于 2017-07-31T03:31:02.793 回答