使用guard let init()

时间:2019-09-24 22:30:28

标签: swift function optional init guard

我想我可能错过了它的工作原理,但是我有一个需要在其多个方法中使用全局可选值的类,现在我将其包装在每个方法中,但是我认为我可以解开该值在init()中。我做错了吗?还是现在应该这样工作? -谢谢。

let iCloudPath = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")


class iCloudManager {

    init() {
        guard let iCloudPath = iCloudPath else { return }
    }

    function1(){
        // uses iCloudPath but returns 'Value of optional type 'URL?' must be unwrapped to a value of type 'URL''
    }

    function2(){
        // uses iCloudPath but returns 'Value of optional type 'URL?' must be unwrapped to a value of type 'URL''
    }

}

1 个答案:

答案 0 :(得分:1)

将结果存储为对象的属性。更好的是,使用静态属性,而不是全局属性。

class iCloudManager {
    static let defaultPath = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")

    let path: URL

    init?() {
        guard let path = iCloudManager.defaultPath else { return nil }
        self.path = path
    }

    func function1() {
        // uses self.path
    }

    func function2() {
        // uses self.path
    }
}