用户 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
我对设计模式还很陌生,所以我需要帮助来确定设计我正在开发的 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