Swift AppDelegate 在 ViewController 之间传递数据

Swift AppDelegate to Pass Data between ViewControllers

我想要像集中式一样class。从一个视图控制器设置数据并从另一个视图控制器访问数据。

这是我所做的。但它不起作用。

首先是class:

class User {
  var userName: String? = ""
}

AppDelegate

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var user: User?
.....

终于viewController

let delegate = UIApplication.shared.delegate as! AppDelegate
 delegate.user?.userName = "abcd"
 print(delegate.user?.userName)

它总是returns nil object

有什么帮助吗?

提前致谢

问题是你没有给用户赋值,所以替换

var user: User?

var user = User()

顺便说一句,你的方式适合像

这样的单身人士
class Service {
  static let shared = Service()
  var user = User()
}

随时随地访问

Service.shared.user.userName = "----"

也可以

var user: User?

但是你应该知道它在你的应用程序流中的什么位置nil/not(首先分配初始化它),例如从异步方法分配一个值,然后其他后续访问将有一个值,当注销设置它再次为零....等等

将以下行放入 didFinishLaunchingWithOptions 方法中。

 user = User()
 user?.userName = "abcd"