用户 Class 设计

User Class Design

我对设计模式还很陌生,所以我需要帮助来确定设计我正在开发的 iOS 应用程序的特定部分的好方法。

我有一个 User 对象,代表登录的用户。它非常简单,看起来像这样:

class User {
    var firstName: String
    var lastName: String
    var photo: String //must be stored as a string for the filename.
    var listOfJoinedOpportunities = [Opportunity]()
    var listOfJoinedOpportunitiesKeys = [String]()
    var listOfFriendsOnTheApp: NSArray
    var bio: String
    var email: String
    var userID: String   //A unique ID that is used to persist data about the user to the database (Firebase). 


  init(firstName: String, lastName: String, photo: String, email:String, userID: String, joinedEvents: [Opportunity],joinedStrings: [String]){
    self.firstName = firstName
    self.lastName = lastName
    self.photo = photo
    self.listOfJoinedOpportunities = joinedEvents
    self.listOfFriendsOnTheApp = []
    self.listOfJoinedOpportunitiesKeys = []
    self.bio = ""
    self.email = email
    self.userID = userID
  }   
}

目前我只需要一个代表登录用户的实例,但如果我添加与应用程序的其他用户交互的功能,我可以预见需要这个 class。

总共 5 个视图包括需要读取和写入表示已登录用户的用户对象的交互。

目前,我通过创建新引用将对象从一个控制器传递到另一个控制器。或者,我正在创建一个新对象,该对象表示来自保存到数据库 (Firebase) 的数据中的同一登录用户。

请帮忙!

将对象传递到目标视图实际上是处理此问题的首选方式 (prepareForSegue)。话虽这么说,您也可以简单地将 User 对象实例存储在您的 AppDelegate 中,并在适合您的模型的情况下轻松地从任何视图引用它。

在 App Delegate 中存储引用的缺点是混乱,而且在更复杂的情况下可能没有必要,因为它们总是会被分配(以及查找延迟加载)。通常,您希望传递对象,以便先前的视图可以解除分配,从而降低内存占用。这样,如果您收到内存警告,您可以适当地处理它以正确恢复。

// Set a var in your appDelegate
var user:User?

// Accessing it from any view
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let loggedInUser = appDelegate.user