我是编码新手,如果这是一个愚蠢的问题,请原谅。
我的应用程序有一个注册页面,后跟主屏幕。在“注册”页面上,用户输入其姓名和电子邮件ID进行注册。我在定义用户对象时使用了以下结构:
public struct User {
let email: String
let name: String
}
let user = User(email: "[email protected]", name: "Paul")
现在,此用户对象在signUp视图中定义,但是我希望能够全局引用其属性。也就是说,在我的主页中,我希望能够包含一条消息:
let welcomeMessage = "Welcome, \(user.name)"
我说的可能吗?
或者我是否应该使用结构以外的其他东西来全局访问User结构的一个且唯一保存的实例?
听起来您正在尝试在本地保存用户数据。如果是这种情况,则应检查here。标记为正确的答案已于2019年更新,因此仍应是相关的。
对于这种情况,有时我喜欢使用静态current
用户。例如:
struct User {
private(set) static var current: User?
let email: String
let name: String
static func login(name: String, email: String) {
current = User(name: name, email: email)
}
}
然后,您可以在代码中的任何位置访问User.current
。您也可以有多个用户,但只有一个current用户。此方法符合this相关的SO问题。
您可以将User
上的属性声明为静态,这将使该值可在应用程序中的任何位置访问。但是有一个警告,您一次不能有一个以上的用户实例。
struct User {
static var email: String?
static var name: String?
}
使用属性时,可以直接在用户类型上访问它们。
User.email = "[email protected]"
User.name = "John Doe"
print(User.email)
print(User.name)
您可以通过几种方式完成
注册完成后即可通过。我确定一旦完成注册。注册完成后,您必须在代码中的某处初始化HomeViewController
。在HomeViewController
中定义用户属性,然后为user
设置属性
示例代码
// You user struct
struct User {
let email: String
let name: String
}
class SignUpViewController: UIViewController {
let user = User(email: "[email protected]", name: "Paul")
// Assuming you have a function which is called on signup is done
func didSignUpCompleted() {
// intialise the hoemviewcontroller(assuming you have storyboard)
let storyboard = UIStoryboard(name: "youstoryboarname", bundle: nil)
let homeViewController = storyboard.instantiateViewController(withIdentifier: "homeViewControllerIdentifier") as! HomeViewController
homeViewController.user = user
// If the viewcontroller is embeded in UINavigation controller
self.navigationController?.pushViewController(homeViewController, animated: true)
}
}
class HomeViewController: UIViewController {
// You can use it further as per your need
var user: User?
}
[如果您有一个用例,可能需要在多个地方使用此特定user
信息,则可以创建一个包含该用户信息的单例类。在此定义该用户属性。调用HomeViewcontroller时进行设置。
class AppSession {
static let shared = AppSession()
var user: User?
private init() { }
}
//Example lets assume below function is called once signup is completed
func didSignUpDon() {
AppSession.shared.user = User(email: "[email protected]", name: "Paul")
}
//Later on you can access it from anywhere like this
let user = AppSession.shared.user