2017-08-15 21 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

相關問題