在控制器 Swift 之间传递对象
Posted
技术标签:
【中文标题】在控制器 Swift 之间传递对象【英文标题】:Passing an object between controller Swift 【发布时间】:2015-09-10 10:27:31 【问题描述】:我有一个以登录页面开头的故事板。我有一个像这样的用户类
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
我正在登录页面中生成一些值,我可以使用这些值创建我的用户对象。
现在我想让这个对象全局化并在所有场景中使用这个用户对象。
如何将此对象传递给其他场景?例如,我想将此值与我的对象一起传递给像这样的嵌入静态表视图控制器
注意:嵌入控制器有标签栏控制器有关系吗?我想我需要使用我的委托文件?
编辑:
现在我已经创建了这样的全局对象:
// 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!)
完成,在终端返回我的值。到这里为止所有的工作。
但是现在值作为 AnyObject 返回给我,我需要将它转换为 String 才能像这样应用:
someLabel.text = getValue!
【问题讨论】:
在单例共享实例类中创建用户对象,您可以在应用程序范围内的任何地方使用它。阅读相关内容。 【参考方案1】:您可以使用NSUserDefaults
来存储您的对象:
NSUserDefaults.standardUserDefaults().setObject(YourObject, forKey: "YouKey")
之后,您可以在任何场景中访问它,例如:
let yourObject: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YouKey")
希望对你有所帮助。
编辑:
NSUserDefaults
可以处理的类型有限:NSData
、NSString
、NSNumber
、NSDate
、NSArray
和 NSDictionary
。因此不能保存任何 Swift 对象或结构。
来自 Apple NSUserDefaults
文档:
默认对象必须是属性列表,即(或 对于集合实例的组合):NSData,NSString, NSNumber、NSDate、NSArray 或 NSDictionary。如果你想存储任何 其他类型的对象,您通常应该将其归档以创建一个 NSData 的实例。
如果您使用的是NSUserDefaults
,那么您可以直接存储您的实例,如下所示:
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmCode")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "firmId")
NSUserDefaults.standardUserDefaults().setObject(test, forKey: "userId")
你不需要模型类。
【讨论】:
我再次编辑了问题。顺便说一句谢谢。但现在我又有一个小问题了。编辑:好的,解决了:) 您可以将其转换为字符串,例如someLabel.text = "\(getValue!)
很高兴为您提供帮助..:)【参考方案2】:
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
【讨论】:
嘿,你从哪里学来的??我不太了解swift!有什么有用的文件吗? 我为“用户”模块创建了模态类。您可以通过此链接获得想法weheartswift.com/object-oriented-programming-swift以上是关于在控制器 Swift 之间传递对象的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 - 在视图控制器之间传递数据,然后再传递给另一个 2