在控制器之间传递对象 Swift
Passing an object between controller Swift
我有一个以登录页面开头的故事板。我有一个这样的用户 class
class User {
// Properties
var firmCode : String
var firmId : String
var userId : String
// Default Initializer
init() {
self.firmCode = ""
self.firmId = ""
self.userId = ""
}
// Defult Initializer with prams
init(firmCode: String, firmId: String, userId: String) {
self.firmCode = firmCode
self.firmId = firmId
self.userId = userId
}
}
我正在登录页面生成一些值,我可以用这些值创建我的用户对象。
现在我想把这个对象设为全局对象,在所有场景中使用这个用户对象。
如何将这个对象传递给其他场景?例如,我想将此值与我的对象一起传递给像这样的嵌入静态 table 视图控制器
注意:嵌入控制器有标签栏控制器有关系吗?我想我需要使用我的委托文件?
编辑:
现在我已经像这样创建了我的全局对象:
// test value
let firmId = "Company Id"
// Creating user object without user class declaration
NSUserDefaults.standardUserDefaults().setObject(firmId, forKey: "testFirmId")
并尝试像这样获取我的对象:
// Creating user variable in other scene by globally
let getValue : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("testFirmId")
// checking
println(getValue!)
完成,return 我在 termanal 上的价值。所有工作到此为止。
但现在值 return 对我来说是 AnyObject,我需要将其转换为 String 以像这样应用:
someLabel.text = getValue!
你可以使用 NSUserDefaults
就像你可以这样存储你的对象一样:
NSUserDefaults.standardUserDefaults().setObject(YourObject, forKey: "YouKey")
之后您可以在任何场景中访问它,例如:
let yourObject: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YouKey")
希望对你有所帮助
编辑:
NSUserDefaults
受限于它可以处理的类型:NSData
、NSString
、NSNumber
、NSDate
、NSArray
和NSDictionary
。因此无法保存 Swift 对象或结构。
来自 Apple NSUserDefaults
文档:
A default object must be a property list, that is, an instance of (or
for collections a combination of instances of): NSData, NSString,
NSNumber, NSDate, NSArray, or NSDictionary. If you want to store any
other type of object, you should typically archive it to create an
instance of NSData.
如果您使用的是 NSUserDefaults
,那么您可以直接存储您的实例,如下所示:
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmCode")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmId")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "userId")
你不需要模型 class。
var user = User()
self.user.firmCode = 1
//给其他变量赋值
//像这样在NSUserDefaults中保存User对象
User.saveUserObject(user)
//保存用户功能
class func saveUserObject(user : User){
let userKey = "UserData \(user.userID)"
NSUserDefaults.standardUserDefaults().setObject(data, forKey: userKey)
}
//从NSUserDefaults获取用户对象
class func getUserObject(userIDValue : NSNumber) -> User? {
let userKey = "UserData \(userIDValue)"
if let data = NSUserDefaults.standardUserDefaults().objectForKey(userKey) as? NSData {
return data as? User
}
return nil
}
我有一个以登录页面开头的故事板。我有一个这样的用户 class
class User {
// Properties
var firmCode : String
var firmId : String
var userId : String
// Default Initializer
init() {
self.firmCode = ""
self.firmId = ""
self.userId = ""
}
// Defult Initializer with prams
init(firmCode: String, firmId: String, userId: String) {
self.firmCode = firmCode
self.firmId = firmId
self.userId = userId
}
}
我正在登录页面生成一些值,我可以用这些值创建我的用户对象。
现在我想把这个对象设为全局对象,在所有场景中使用这个用户对象。
如何将这个对象传递给其他场景?例如,我想将此值与我的对象一起传递给像这样的嵌入静态 table 视图控制器
注意:嵌入控制器有标签栏控制器有关系吗?我想我需要使用我的委托文件?
编辑:
现在我已经像这样创建了我的全局对象:
// test value
let firmId = "Company Id"
// Creating user object without user class declaration
NSUserDefaults.standardUserDefaults().setObject(firmId, forKey: "testFirmId")
并尝试像这样获取我的对象:
// Creating user variable in other scene by globally
let getValue : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("testFirmId")
// checking
println(getValue!)
完成,return 我在 termanal 上的价值。所有工作到此为止。
但现在值 return 对我来说是 AnyObject,我需要将其转换为 String 以像这样应用:
someLabel.text = getValue!
你可以使用 NSUserDefaults
就像你可以这样存储你的对象一样:
NSUserDefaults.standardUserDefaults().setObject(YourObject, forKey: "YouKey")
之后您可以在任何场景中访问它,例如:
let yourObject: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YouKey")
希望对你有所帮助
编辑:
NSUserDefaults
受限于它可以处理的类型:NSData
、NSString
、NSNumber
、NSDate
、NSArray
和NSDictionary
。因此无法保存 Swift 对象或结构。
来自 Apple NSUserDefaults
文档:
A default object must be a property list, that is, an instance of (or for collections a combination of instances of): NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary. If you want to store any other type of object, you should typically archive it to create an instance of NSData.
如果您使用的是 NSUserDefaults
,那么您可以直接存储您的实例,如下所示:
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmCode")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmId")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "userId")
你不需要模型 class。
var user = User()
self.user.firmCode = 1
//给其他变量赋值
//像这样在NSUserDefaults中保存User对象
User.saveUserObject(user)
//保存用户功能
class func saveUserObject(user : User){
let userKey = "UserData \(user.userID)"
NSUserDefaults.standardUserDefaults().setObject(data, forKey: userKey)
}
//从NSUserDefaults获取用户对象
class func getUserObject(userIDValue : NSNumber) -> User? {
let userKey = "UserData \(userIDValue)"
if let data = NSUserDefaults.standardUserDefaults().objectForKey(userKey) as? NSData {
return data as? User
}
return nil
}