2014-09-01 86 views
3

我想使用JSONModel將json映射到Swift中的模型。在Swift中的JSONModel問題

如果模型不具有JSONModel子類的屬性,則一切正常。

所以例如在這部作品中,它的性能成功地映射:

class Person: JSONModel { 

    var name: NSString? 
    var gender: NSString? 

} 

但如果我把JSONModel子類城市,這個屬性沒有初始化,當我嘗試訪問城市崩潰的應用程序後來物業(我可以成功訪問person.name和person.gender,但person.city它崩潰,沒有任何信息):

class Person: JSONModel { 

    var name: NSString? 
    var gender: NSString? 
    var city: City? // City is JSONModel subclass 
} 

它看起來像JSONModel不能映射/解析財產,如果它是一個JSONModel子。 有沒有人經歷過這個並解決了它?

+0

您在使用JSONModel得到解決或者你切換到不同的庫 – iDilip 2015-06-08 15:54:17

+0

添加@objc(類名)上課前聲明 – vburojevic 2015-06-09 08:11:19

+0

謝謝vburojevic回覆。你的意思是這樣的:@objc class Person:JSONModel { var name:NSString? var性別:NSString? var city:City? } – iDilip 2015-06-10 16:05:30

回答

0

也許它可能有助於將訪問級別設置爲「公共」?

public class Person: JSONModel { 
    public var name: NSString? 
    public var gender: NSString? 
    public var city: City? // City is JSONModel subclass 
} 

public class City: JSONModel { 
    public var name: NSString? 
} 
+0

它不適合我。 – iDilip 2015-06-11 13:57:07

6

JSONModel 不斯威夫特工作,這就是爲什麼你遇到的問題。從JSONModel readme

注意:Swift在Objective-C下以不同的方式工作。 因此我找不到在Swift中重新創建JSONModel的方法。 Objective-C中的JSONModel通過CocoaPods在Swift應用程序中工作,或者作爲 導入的Objective-C庫。

您可能可以在某些邊界情況下使用它 - 但唯一可靠的方式是使用它,通過編寫Objective C代碼並使用這些Objective C類。如果你想做純粹的Swift,你應該看看其他庫,例如Argo和其他一些庫。

1

其實在斯威夫特與JSONModel的問題如下:

它採用Objc運行時的理解是什麼類型的每個屬性,一旦你定義一個類型的Objc運行時不知道如何映射,那麼JSONModel只能將它映射爲字符串.........或NSNumber,如果你知道你有一個數字字段。

它的工作方式: 所以基本上如果你聲明所有的屬性在你的情況下仍然是零,你會開始看到值。如果您將數字字段聲明爲NSNumber,那麼同樣的作品。對於JSONModel,String和NSNumber都可以聲明爲可選項,而不存在特定的問題。

但是你不敢用Swift中的基本類型和可選的聲明(Int?,Double?,Bool?)。這不起作用。

什麼工作以任何方式避免通過聲明爲選配:

1)VAR tmpInt:= 0,給人一種默認值

2)VAR tmpInt:詮釋!,迫使

當然這最後的「變通方法」完全反對,爲什麼斯威夫特出現在這個世界上,但是這是你如何把舊的Objective-C的習慣,在新的現代雨燕(;

-1

終於發現了一個偉大JSONModel替代斯威夫特:EVReflection

工程與嵌套屬性:?EVObject子類的子類EVObject陣列等

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/16484396) – 2017-06-22 00:28:07

+0

該鏈接根本不回答問題。 :) JSONModel替換是EVReflection。它沒有設計提到的問題。 – 2017-06-22 05:30:14