在控制器 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 可以处理的类型有限:NSDataNSStringNSNumberNSDateNSArrayNSDictionary。因此不能保存任何 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 - 在视图控制器之间传递数据

Swift 3 - 在视图控制器之间传递数据,然后再传递给另一个 2

如何在 Swift 中的视图控制器之间传递数据?

Swift 3 - 在视图控制器之间传递变量和函数

Swift:在视图控制器之间传递 facebook 登录 graphRequest 结果

如何在 Swift 3.0 中的控制器之间传递 JSON 数据?