我想我可能错过了它的工作原理,但是我有一个需要在其多个方法中使用全局可选值的类,现在我将其包装在每个方法中,但是我认为我可以解开该值在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''
}
}
答案 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
}
}