迅捷:避免强行打开常量变量

时间:2018-08-03 00:16:36

标签: ios swift

我正在尝试避免强制打开全局变量。在这个特定的示例中,我该怎么做:

let AppDelegate = UIApplication.shared.delegate as! AppDelegate

3 个答案:

答案 0 :(得分:1)

如果您不想强行解包(在这种情况下可以这样做),请使用if let

if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
    // Do something with appDelegate
}

但是,强制展开对此很好。如果您对应用程序委托的类型进行错别字,则您希望应用程序在开发过程中崩溃。除非您更改代码并将其交付给Apple,而不必至少运行一次应用程序,否则它将永远不会失败。

答案 1 :(得分:0)

对此进行扩展,因此不再复制粘贴。这是安全的类型,因为只有UIApplicationDelegate实现UIApplication.shared.delegate才有意义,并且始终可以通过#if os(macOS) import Cocoa typealias ApplicationDelegate = NSApplicationDelegate typealias Application = NSApplication #else import UIKit typealias ApplicationDelegate = UIApplicationDelegate typealias Application = UIApplication #endif public extension ApplicationDelegate { static var shared: Self { return Application.shared.delegate as! Self } } 到达。

{{1}}

答案 2 :(得分:0)

如果要在本地使用该变量,则:

if let appDelegate = UIApplication.shared.delegate as? AppDelegate {   
    //logic here
}

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}

我认为没有不使用强制转换就可以全局使用AppDelegate的方法。

已编辑

要创建全局变量,只需在类外部的任何地方声明它即可。例如:

var globalVariable = 1 

class Person { 
//logic here 
}