在多个Swift类中重用大型未改变的数组,而无需使用全局变量



我对iOS开发相对较新,但这是我一直回到的问题。在我制作的最后一个应用程序(高中教科书定义评论应用程序)中,我有大量的文本从未更改过。随着全球变量的使用被皱眉,我寻找了诸如单身人士之类的替代方案(这些会更优雅地避免我,感觉多余),Preparforsegue(解决这个问题,但感觉必须有更好的方法)和永久存储(由于数据从未改变,但它提供了一个中央存储库,这是没有意义的。天真地,我选择了后者,实施了PLIST,表现降低。

我解释了将单例用于这个问题的解释(以防我的问题源于误解):

class Global {
    let array = ["item1","item2",...,"item1042"]
}

现在,我可以通过Global.array从其他类访问array。我的数组实际上是一个三维的数组,但是我看不出这将如何改变问题(在许多情况下会创建一个类,但这就像是为了使问题更复杂,仅仅是为了可读性)。<<<<<<<<<</p>

除了使用Coredata(再次看起来像是过度杀伤力)之外,我还处于智慧。

我想在我的所有课程中使用一个不变的数组/字典,最好不要将其复制到每个类中。

实现这一目标的适当风格是什么?

如果已经回答了这一点,我深表歉意(似乎总的来说),但是我发现的任何答案要么对我的理解水平太复杂,要么是无用的。

single app session中有很多方法可以使用persist data。但是,在所有这些中,我更喜欢在AppDelegate中创建一个变量,并使用shared instance在应用中使用它。这样,您就无需使用static variable或任何类型的global variable创建单独的singleton或任何其他类别。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
    let array = ["item1","item2","item1042"]
    //....
}
class ViewController: UIViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()
        print((UIApplication.shared.delegate as? AppDelegate)?.array)
    }
}

另外,如果要在multiple app sessions中进行persist data,则可以使用UserDefaultsCore DataFile System

怎么样
class Global {
    static let array = ["item1","item2",...,"item1042"]
}

使用结构实现这一目标。这是一个示例:

struct Constants {
  private init() {}
  static let array = ["item1","item2",...,"item1042"]
  static let exampleStringConstant = "exampleStringConstant"
  static let deviceId = UIDevice.current.identifierForVendor?.uuidString
  static let isRunningOnSimulator: Bool = {
    #if (arch(i386) || arch(x86_64)) && (os(iOS) || os(watchOS) || os(tvOS))
      return true
    #else
      return false
    #endif
  }()
}

最新更新