Почему нельзя использовать оператор if в AppDelegate? - PullRequest
0 голосов
/ 12 июля 2020

введите описание изображения здесь

почему я не могу передать константу в операторе if?

 if UIDevice.current.orientation.isLandscape{
        let storyboard = UIStoryboard(name: "landscape", bundle: nil)
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "landscape")
    }else{
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "ViewController")
    }
    

    self.window?.rootViewController = initialViewController

Ответы [ 3 ]

1 голос
/ 12 июля 2020

Вам необходимо вставить строку ошибки внутри блока if else в области видимости

if { 
  let initialViewController = //// 
  self.window?.rootViewController = initialViewController
}
else { 
  let initialViewController = //// 
  self.window?.rootViewController = initialViewController
}

OR

var initialViewController:UIViewController!
if { 
  initialViewController = ////
}
else { 
  initialViewController = ////
}
// use it here 
0 голосов
/ 12 июля 2020

Внимательно посмотрите на ошибку, о которой сообщает Swift: он не может найти переменную с именем initialViewController в этой части кода.

Переменные доступны только в том блоке, в котором они созданы. Другими словами, вам нужно вывести объявление initialViewController из оператора if, если вы хотите использовать его где-то еще за пределами оператора if. Вы можете сделать это, сделав вместо него var:

// Let Swift know that we’re going to make this a UIViewController
var initialViewController: UIViewController
if condition {
  // Now, initialViewController has been instantiated; it just needs a value
  initialViewController = storyboard.instantiateViewController(withIdentifier: "landscape")
} else {
  initialViewController = storyboard.instantiateViewController(withIdentifier: "portrait")
}

// We can safely use it outside of the if statement, but it may need unwrapping since it was declared as a var 
self.window?.rootViewController = initialViewController!

Обратите внимание, что копирование / вставка этого точного кода не будет работать, поскольку я не определил переменные storyboard или condition: посмотрим, сможете ли вы изменить текущий код, чтобы исправить проблему, как я описал здесь!

0 голосов
/ 12 июля 2020

initialViewController доступен только в рамках блока if else, поэтому вам нужно объявить initialViewController до начала блока if else и установить свойство initialViewController внутри блока, а затем использовать его по мере необходимости. .

let initialViewController: UIViewController
if UIDevice.current.orientation.isLandscape {
    let storyboard = UIStoryboard(name: "landscape", bundle: nil)
    initialViewController = storyboard.instantiateViewController(withIdentifier: "landscape")
} else {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    initialViewController = storyboard.instantiateViewController(withIdentifier: "ViewController")
}
window?.rootViewController = initialViewController

Примечание: вам, вероятно, следует провести дополнительные исследования в области программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...