关于iOS项目的全局变量

8

我想知道如何在iOS项目中使用全局变量。

最近,我发现了一份用Swift编写的文档。

这份文档包含一些代码。

import UIKit

let log = ColorLogger.defaultInstance

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

      var window: UIWindow?


      func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

这个程序只有全局变量,其中一个是log。

log通常用于开发而不是生产环境。

我认为log应该放在appdelegate里。

但我不知道如何处理iOS项目的变量标准。

在iOS产品中使用全局变量是否符合标准?

2个回答

16

在Swift中有几种创建“全局”变量的方法,我将描述其中一些。

1. 在 AppDelegate 中定义变量

AppDelegate 似乎是一些全局变量的逻辑位置。正如您所说,您可以在AppDelegate中创建日志记录器实例或其他实例。

要创建用作全局变量的实例,请转到 AppDelegate.swift 并像这样创建变量:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
...
    let myAppInstance = SomeClass()
...
}

那么,如果您想在应用程序的任何其他部分访问myAppInstance,您会编写:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.myAppInstance.doSomething()

2. 创建单例

单例可能是在任何苹果平台中使用最多的设计模式之一。当创建应用程序时,几乎在使用任何iOS API时都会出现它们,并且通常用于创建全局变量。

本质上,单例是延迟加载的实例,仅被创建一次。让我们看代码示例:

class MyDataStructure {
   static var sharedInstance = MyDataStructure() // This is singleton

   private init() {

   }
}

我们创建了一个名为 MyDataStructure 的类,以及一个名为 sharedInstance 的单例实例。这是单例模式中最常见的名称,因为单例是整个应用程序共享的实例。

请注意,在定义单例时使用了 static 关键字。这告诉编译器只有在第一次访问 sharedInstance 时才创建它。任何其他对 sharedInstance 的访问都将重用第一次创建的实例。

要使用它,您只需要编写:

MyDataStructure.sharedInstance

谢谢您的回答。我将使用单例作为全局变量。 - shunsuke_stackoverflow

1

在 YourApp.swift 中定义变量:

在使用 SwiftUI 的项目中,AppDelegate 已经消失了。现在的工作流由继承自 App 的结构体管理。以下是如何在这种情况下创建全局变量的方法:

@main
struct YourApp: App {
    static let myGlobalVariable : String = "global"

    var body: some Scene {
        WindowGroup {
            Text("View")
        }
    }
}

在管理工作流的结构体中声明静态变量。然后,您可以通过以下方式在任何文件中访问它:

YourApp.myGlobalVariable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接