如何在 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 中。