2017-08-15 47 views
0

我有一个可Mappable类型的模型类,其中我通过firstViewController中的api传递数据。现在我想访问secondViewController中的模型类数据。所以我怎么可以在secondViewController中使用数据。 这里是我的代码:如何在swift中获取另一个ViewController中的可映射模型类数据3

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从那里我发送的数据,这一模型类

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. 
+0

你可以参考这个https://stackoverflow.com/documentation/ios/434/passing-data-between-view-controllers#t=201702200732185412699 – ASP

+0

@ASP谢谢,我知道,但我不是从第一到第二导航或相反亦然。其实secndVc视图从菜单中选择选项后打开。所以它不在导航视图控制器堆栈中。所以我需要的是如何创建UserProfileData的对象并使用它。 – user3655325

回答

0

创建一个Signleton类,您可以从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您的信息在此第一次只停留。

+0

Santosh还有一件事我该如何处理这个班的空值。对于“policyNo”,我收到了空值。 – user3655325

+0

如果为零,则可映射返回nil。如果你想处理nil与一些默认值,你可以做到这一点,如果让policyNum = map.JSON [“policyNum”] {/ /如果不是零值分配值} – Santhosh

0

如果你正在使用赛格瑞那么你可以使用准备顺着接下去显示来自firstViewController的secondViewController传递数据。

override func prepare(for segue: UIStoryboardSegue, sender _: Any?) { 
      let destinationViewController = segue.destination as! SecondViewController 
destinationViewController.userProfileData = self.userProfileData 
} 

然后你的secondViewController将会像这样多了你的实现。

class SecondViewController{ 

var userProfileData:UserProfileData? 
} 
+0

没有兄弟,其实我想创建UserProfileData的对象,然后我想要使用存储在我从API回购的那个类中存储的值。 您提供的解决方案对于传递数据b/w 2控制器是正确的。 – user3655325

相关问题