我的应用程序中包含以下工作代码:
func downloadJSON(completed: @escaping ([JsonFile.JsonBonuses]?) -> ()) {
let url = URL(string: "http://example.com/ExampleData.json")!
URLSession.shared.dataTask(with: url) { (data, response, error) in
if error == nil, let data = data {
do {
let posts = try JSONDecoder().decode(JsonFile.self, from: data)
completed(posts.bonuses)
self.defaults.set(posts.meta.version, forKey: "jsonVersion")
print("URLSession did not fail")
print("JSON Version Set to \(posts.meta.version)")
} catch {
print("Can't decode JSON: \(error)")
}
} else {
print("downloadJSON completed")
completed(nil)
}
}.resume()
}
我想根据UserDefaults设置将该URL更改为其他URL。因此,我将let网址包装在一个if语句中,如下所示:
if devModeStatus == true {
let url = URL(string: "https://otherexample.com/Example2Data.json")!
} else if devModeStatus == false {
let url = URL(string: "http://example.com/ExampleData.json")!
} else {
print("Invalid Dev Status encountered!")
return
}
但是,当我这样做时,Xcode抱怨“使用未解析的标识符'url';您是指'erfl'吗?”在显示URLSession.shared.dataTask(with: url) { (data, response, error) in
我不确定为什么要抱怨这一变化。我在第一次加载此视图时使用相同的if / else逻辑在其他位置打印状态消息,因此我知道该变量是正确的。
答案 0 :(得分:3)
您的url
声明在这些if
和else-if
范围内死亡。您需要先声明url
,然后再进行修改。另外,由于devModeStatus
是布尔值,所以永远不会达到else情况,因此不需要第三条路径。如下更新代码:
let url: URL
if devModeStatus {
url = URL(string: "https://otherexample.com/Example2Data.json")!
} else {
url = URL(string: "http://example.com/ExampleData.json")!
}