SwiftyJsonデータの配列があり、これを宣言してデータを入力しました。hoge配列に入力するために使用しているコードは次のとおりです:self.hoge = JSON(data: data!)
しかし、このhoge配列に新しいswiftyJSONデータを追加する必要があります。hoge配列には追加プロパティがないことに気付きました。どうすればいいですか?
ありがとう
SwiftyJSONにはappend
またはextend
機能がありません。
あなたはできる:
self.hoge = JSON(self.hoge.arrayObject! + JSON(data: newData).arrayObject!)
ただし、self.hoge
を[JSON]
として宣言することをお勧めします
var hoge:[JSON] = []
func readMoreData() {
let newData: NSData = ...
if let newArray = JSON(data:newData).array {
self.hoge += newArray
}
}
Extension
を使用した別のソリューション
extension JSON{
mutating func appendIfArray(json:JSON){
if var arr = self.array{
arr.append(json)
self = JSON(arr);
}
}
mutating func appendIfDictionary(key:String,json:JSON){
if var dict = self.dictionary{
dict[key] = json;
self = JSON(dict);
}
}
}
使用する:
var myJSON: JSON = [
"myDictionary": [String:AnyObject](),
"myArray" : [1,2,3,4]
]
myJSON["myDictionary"].appendIfDictionary(key:"A", json: JSON(["key1":"value1"]))
myJSON["myDictionary"].appendIfDictionary(key: "B", json: JSON(["key2":"value2"]))
myJSON["myArray"].appendIfArray(json: JSON(5))
印刷:
{
"myArray" : [
1,
2,
3,
4,
5
],
"myDictionary" : {
"B" : {
"key2" : "value2"
},
"A" : {
"key1" : "value1"
}
}
}
これにはmerge
関数を使用できます。 https://github.com/SwiftyJSON/SwiftyJSON#merging
var array: JSON = [1, 2, 3]
array = try! array.merged(with: [4])
// -> [1, 2, 3, 4]
let jsonNewJSON:JSON = JSON(newData)
var arr:[JSON]=jsonOBJ.arrayValue
arr.append(jsonNewJSON)
var combinedOBJ = JSON(arr)
上記のコードを使用してswiftyjson配列に追加しました。まず、新しいデータをJSONオブジェクトに変換しました。次に、既存のJSONの配列を取得し、新しいJSONを追加します。配列をJSONオブジェクトに変換し直しました。確かにすばらしいコードではありませんが、ここではパフォーマンスは必要ありませんでした。
_self.hoge
_は、Swift配列(varとして宣言されている場合は変更可能)またはNSMutableArrayにキャストする必要があります。配列タイプの場合は、appendを使用します。NSMutableArrayにキャストする場合は、self.hoge.addObject(yourObject)
。
メインのJSON配列を次のように宣言します。
var data:[JSON] = []
データソースが他のオブジェクト(レルムなど)の場合は、forループを使用してループしますが、データソースが別のJSON配列の場合は、次を実行します。
func setData(){
data = []
if let items = sourceData.array {
for item in items {
data.append(item)
}
}
collectionView.reloadData()
}