我正在尝试避免强制打开全局变量。在这个特定的示例中,我该怎么做:
let AppDelegate = UIApplication.shared.delegate as! AppDelegate
答案 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
}