gpt4 book ai didi

Swift - 尝试访问 Singleton 对象时出现问题

转载 作者:行者123 更新时间:2023-11-30 10:14:54 25 4
gpt4 key购买 nike

我正在尝试在我的应用程序上实现单例模式,但到目前为止还没有成功。当我尝试访问我的单例时,程序似乎没有访问真正的单例,而是访问它的副本。由于此副本未初始化,我的应用程序崩溃,显示此错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

这是我编写的代码示例:

import UIKit

class ViewController: UIViewController {

static let sharedViewController = ViewController()

var name: String = "Billy"
var age: Int = 12

override func viewDidLoad() {
super.viewDidLoad()

println("Old name from ViewController: \(name)")
println("Old age from ViewController: \(age)")

name = "Jack"
age = 45

println("New name from ViewController: \(name)")
println("New age from ViewController: \(age)")

println("singleton name from ViewController: \(ViewController.sharedViewController.name)")
println("singleton name from ViewController: \(ViewController.sharedViewController.age)")
}
}

如您所见,这非常简单。该类有两个在创建时初始化的属性,它们在 viewDidLoad() 中修改。首先,我尝试直接访问属性,然后通过单例访问。

这是输出:

Old name from ViewController: Billy
Old age from ViewController: 12
New name from ViewController: Jack
New age from ViewController: 45
singleton name from ViewController: Billy
singleton name from ViewController: 12

可以看到,从单例角度来看数据还是一样的。不幸的是,年轻的比利永远不会长大。

我在 Swift 中实现了单例模式的所有三种方法,正如本主题中所说:dispatch_once singleton model in swift ,没有任何成功。

我不明白为什么我无法访问真正的单例而只能访问它的副本(这对于单例模式来说是不好的)。

感谢您的帮助。

最佳答案

我认为,最终,您不会创建 UIViewController 的单例。您可能想要的是创建一个类,例如 Person

不过,如果你不想像你那样做,static let sharedViewController = ViewController()self 不是同一个对象

import UIKit

class ViewController: UIViewController {

static let sharedViewController = ViewController()

var name: String = "Billy"
var age: Int = 12

override func viewDidLoad() {
super.viewDidLoad()

println("VC - Name : \(name)")
println("VC - Age : \(age)")

println("Singleton - Name : \(name)")
println("Singleton - Age : \(age)")

ViewController.sharedViewController.name = "Jack"
ViewController.sharedViewController.age = 45

println("VC - Name : \(name)")
println("VC - Age : \(age)")

println("Singleton - Name : \(ViewController.sharedViewController.name)")
println("Singleton - Age : \(ViewController.sharedViewController.age)")

}
}

控制台:

VC - Name : Billy
VC - Age : 12
Singleton - Name : Billy
Singleton - Age : 12
VC - Name : Billy
VC - Age : 12
Singleton - Name : Jack
Singleton - Age : 45

无论如何,请尝试更多地记录自己有关单例模式的信息:-)

关于Swift - 尝试访问 Singleton 对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com