如何在 swift 中的另一个 ViewController 中获取可映射模型 class 数据 3
How to get Mappable model class data in another ViewController in swift 3
我有一个 Mappable 类型的模型 Class,我在其中从 firstViewController 中传递来自 api 的数据。现在我想访问 secondViewController 中的模型 class 数据。那么我如何使用 secondViewController 中的数据。
这是我的代码:
import ObjectMapper
class UserProfileResponse: Mappable {
var data:UserProfileData?
var success: Bool?
var error: String?
required init?(map: Map){
}
func mapping(map: Map) {
data <- map["data"]
success <- map["success"]
error <- map["error"]
}
}
class UserProfileData: Mappable {
var address: String?
var joinDate: String?
var phone: String?
var policyName: String?
var imageUrl: String?
var name: String?
var policyNo: String?
var title: String?
required init(map: Map){
}
func mapping(map: Map) {
address <- map["address"]
joinDate <- map["joinDate"]
phone <- map["phone"]
policyName <- map["policyName"]
imageUrl <- map["imageUrl"]
name <- map["name"]
policyNo <- map["policyNo"]
title <- map["title"]
}
}
我的 FirstViewController 我从那里发送数据到这个模型 class
func getUserProfileDataFromApi(){
//Calling the method from Api class
userProfileApi{completion in self.getProfileData(result: completion)}
}
func userProfileApi(completion:@escaping (_ result:UserProfileData)->()) {
let defaultObject = UserDefaults.standard
let headerToken = defaultObject.object(forKey: KHeaderToken) as! String
let headers = ["Authorization": headerToken]
Alamofire.request(KProfileUrl, method: .post, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseObject{ (response: DataResponse<UserProfileResponse>) in
switch response.result{
case .success:
let value = response.result.value
completion((value?.data)!)
case .failure(let error):
print(error.localizedDescription)
}
}
}
func getProfileData(result: UserProfileData){
// Here i get all data in firstViewController
}
Now how i can get the UserProfileData in secondViewController.
如果您使用 segue 显示来自 firstViewController 的 secondViewController,那么您可以使用 prepare segue 来传递数据。
override func prepare(for segue: UIStoryboardSegue, sender _: Any?) {
let destinationViewController = segue.destination as! SecondViewController
destinationViewController.userProfileData = self.userProfileData
}
然后你的 secondViewController 将像这样加上额外的实现。
class SecondViewController{
var userProfileData:UserProfileData?
}
创建一个 Signleton class,您可以在其中根据 API 响应填充您的 UserProfileData。
class UserProfileManager {
static var userProfile: UserProfileData?
private static var sharedManager: UserProfileManager = {
let shared = UserProfileManager()
return shared
}()
class func shared() -> UserProfileManager {
return sharedManager
}
}
您可以从此单例访问 userProfileData,但如果您退出并启动它,它只会在第一次时保留,不会在那里将您的信息存储在 UserDefaults 中。
我有一个 Mappable 类型的模型 Class,我在其中从 firstViewController 中传递来自 api 的数据。现在我想访问 secondViewController 中的模型 class 数据。那么我如何使用 secondViewController 中的数据。 这是我的代码:
import ObjectMapper
class UserProfileResponse: Mappable {
var data:UserProfileData?
var success: Bool?
var error: String?
required init?(map: Map){
}
func mapping(map: Map) {
data <- map["data"]
success <- map["success"]
error <- map["error"]
}
}
class UserProfileData: Mappable {
var address: String?
var joinDate: String?
var phone: String?
var policyName: String?
var imageUrl: String?
var name: String?
var policyNo: String?
var title: String?
required init(map: Map){
}
func mapping(map: Map) {
address <- map["address"]
joinDate <- map["joinDate"]
phone <- map["phone"]
policyName <- map["policyName"]
imageUrl <- map["imageUrl"]
name <- map["name"]
policyNo <- map["policyNo"]
title <- map["title"]
}
}
我的 FirstViewController 我从那里发送数据到这个模型 class
func getUserProfileDataFromApi(){
//Calling the method from Api class
userProfileApi{completion in self.getProfileData(result: completion)}
}
func userProfileApi(completion:@escaping (_ result:UserProfileData)->()) {
let defaultObject = UserDefaults.standard
let headerToken = defaultObject.object(forKey: KHeaderToken) as! String
let headers = ["Authorization": headerToken]
Alamofire.request(KProfileUrl, method: .post, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseObject{ (response: DataResponse<UserProfileResponse>) in
switch response.result{
case .success:
let value = response.result.value
completion((value?.data)!)
case .failure(let error):
print(error.localizedDescription)
}
}
}
func getProfileData(result: UserProfileData){
// Here i get all data in firstViewController
}
Now how i can get the UserProfileData in secondViewController.
如果您使用 segue 显示来自 firstViewController 的 secondViewController,那么您可以使用 prepare segue 来传递数据。
override func prepare(for segue: UIStoryboardSegue, sender _: Any?) {
let destinationViewController = segue.destination as! SecondViewController
destinationViewController.userProfileData = self.userProfileData
}
然后你的 secondViewController 将像这样加上额外的实现。
class SecondViewController{
var userProfileData:UserProfileData?
}
创建一个 Signleton class,您可以在其中根据 API 响应填充您的 UserProfileData。
class UserProfileManager {
static var userProfile: UserProfileData?
private static var sharedManager: UserProfileManager = {
let shared = UserProfileManager()
return shared
}()
class func shared() -> UserProfileManager {
return sharedManager
}
}
您可以从此单例访问 userProfileData,但如果您退出并启动它,它只会在第一次时保留,不会在那里将您的信息存储在 UserDefaults 中。