在 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.
}
几个解决方案:
使用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")
}
- 创建单独的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
读取它。
根据我发布的另一个问题的线索,我现在正尝试在 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.
}
几个解决方案:
使用
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")
}
- 创建单独的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
读取它。