在 AppDelegate 中传递全局用户名 Swift

Passing Global Username in AppDelegate Swift

根据我发布的另一个问题的线索,我现在正尝试在 swift 中的 AppDelegate class 中声明一个全局用户名变量。我的目标是让用户在启动屏幕中输入他的用户名,然后在其他视图的标签上弹出该用户名 - 简单的通用用户名。

我已经在我的 AppDelegate 中声明了用户名 class

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var userName = ""

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

在我的主控制器中,我有一个标签和一个设置名称的按钮功能

class ViewController: UIViewController {

    @IBOutlet var userLabel : UILabel!

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

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func setName (){ 
        appDelegate.userName = userLabel.text!;

    }
}

当时的想法是,这个名称将在我的 player2 控制器的标签中弹出

import Foundation
import UIKit

class Player2 : UIViewController {

    @IBOutlet var player2 : UILabel!

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


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.player2.text = appDelegate.userName as? String

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

几个解决方案:

  1. 使用NSUserDefaults存储用户名 在你的 AppDelegate 中:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            NSUserDefaults.standardUserDefaults().setObject("VitaliyGozhenko", forKey: "Username")
            return true
        }
    

在您的 UIViewController 中:

override func viewDidLoad() {
    super.viewDidLoad()
    userLabel.text = NSUserDefaults.standardUserDefaults().objectForKey("Username")
    }
  1. 创建单独的class User存储用户名,邮箱等与用户相关的信息,添加class 属性 [User currentUser]存储当前用户信息.之后您可以在应用程序的任何地方访问当前用户信息

在新文件 User.swift 中为 User 创建新的 class:

import UIKit

class User: NSObject {

    static let currentUser = User()

    var username:String?
}

之后您可以修改您的 AppDelegate:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            User.currentUser.username = "VitaliyGozhenko"
            return true
        }

在您的 UIViewController 中:

override func viewDidLoad() {
    super.viewDidLoad()
    userLabel.text = User.currentUser.username
    }

这是将 userName 从一个 ViewController 传递给另一个 ViewController 的简单方法。

//Set your userName with specific key 
@IBAction func setName (){
    NSUserDefaults.standardUserDefaults().setObject(userLabel.text, forKey: "userName")
}

之后,您可以这样从 SecondViewController 中读取该值:

override func viewDidLoad() {
    super.viewDidLoad()
    let userName = NSUserDefaults.standardUserDefaults().objectForKey("userName") as! String
    player2.text = "\(userName)"

}

您不需要在 AppDelegate class.

中声明任何变量

只需从您的 ViewController class 中获取 userLabel.text 的值并将其存储。之后,您可以从项目中的任何地方 NSUserDefaults 读取它。