我对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
,则可以使用UserDefaults
,Core Data
或File 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
}()
}