为什么不能在AppDelegate中使用if语句?

时间:2020-07-12 15:02:07

标签: swift xcode ios13 swift5

enter image description here

为什么我不能在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 个答案:

答案 0 :(得分:1)

您需要在范围内的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 

答案 1 :(得分:0)

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

注意:您可能应该对编程范围进行更多研究。

答案 2 :(得分:0)

仔细查看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!

请注意,由于尚未定义storyboardcondition变量,因此无法复制/粘贴此确切的代码:请查看是否可以更改当前代码以解决我的问题已经描述过了!