Почему XCode жалуется, когда я заключаю это в выражение if? - PullRequest
0 голосов
/ 14 января 2019

В моем приложении есть следующий рабочий код:

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()
    }

Я хочу изменить этот URL-адрес на другой в зависимости от настроек UserDefaults. Поэтому я заключил 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 else для печати сообщения о состоянии при первой загрузке этого представления, поэтому я знаю, что переменная верна.

1 Ответ

0 голосов
/ 14 января 2019

Ваша декларация 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")!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...