在Objective-C,我們可以使用對象映射與JSON響應像這樣initWithDictionary:在Objective-C和夫特
PolicyData *policyData = [[PolicyData alloc] initWithDictionary:responseObject error:&err];
在這裏,我們可以用的policyData類屬性映射responseObject。 我如何在Swift中做同樣的事情?
在Objective-C,我們可以使用對象映射與JSON響應像這樣initWithDictionary:在Objective-C和夫特
PolicyData *policyData = [[PolicyData alloc] initWithDictionary:responseObject error:&err];
在這裏,我們可以用的policyData類屬性映射responseObject。 我如何在Swift中做同樣的事情?
它應該像添加橋接頭一樣簡單(因爲PolicyData
很可能寫在Objective-C中)。說明如何做到這一點can be seen in this Apple documentation。
然後,你可以爲輕鬆地創建PolicyData
對象做:
do {
let newPolicyDataObject = try PolicyData(responseObject)
} catch error as NSError {
print("error from PolicyData object - \(error.localizedDescription)")
}
這裏假設你的responseObject
是一個的NSDictionary。 Swift 2幫助(?)將錯誤參數轉換爲try/catch塊。
也就是說,的policyData的
- (instancetype) initWithDictionary:(NSDictionary *)responseObject error:(NSError *)err;
聲明魔術般地變成
func initWithDictionary(responseObject : NSDictionary) throws
在這個蘋果的Objective-C /斯威夫特的互操作性文檔的"Error Handling" section描述。
您可以添加
convenience init?(dictionary: NSDictionary)
你想從字典初始化和初始化它的屬性有任何對象。
然而,由於swift不會動態分派(遲早),所以您可能不會推論,期望屬性的名稱成爲任何對象字典中的鍵。
你能解釋一下爲什麼Swift沒有動態調度?它會給Swift任何優於Objective-C的優勢嗎? – Sofeda
動態調度可以打破雨水安全;在動態調度的情況下,可能會在運行時切換不遵守編譯器強制規則的實現。 – SmokeDispenser
非常感謝Jan.有關細節理解的任何參考? – Sofeda
'init'方法最有可能變成'PolicyData(dictionary:responseObject)' – vadian
如果我在swift中創建PolicyData會怎麼樣?在函數initWithDictionary(responseObject:NSDictionary)拋出,我必須映射硬編碼的所有字典鍵?我不想。 – Sofeda
我不知道你的PolicyData'init'方法裏面的代碼是什麼樣的......如果你使用的是AFNetworking,[其他人嘗試過這種方法](http://stripysock.com.au/blog/2014/7/11 /抓取和解析 - json-with-swift)你正在考慮,你可能有幸在[so]上挖苦。 –