web-dev-qa-db-ja.com

新しいデータを既存のJSON配列に追加する方法(swiftyJSON)

SwiftyJsonデータの配列があり、これを宣言してデータを入力しました。hoge配列に入力するために使用しているコードは次のとおりです:self.hoge = JSON(data: data!)

しかし、このhoge配列に新しいswiftyJSONデータを追加する必要があります。hoge配列には追加プロパティがないことに気付きました。どうすればいいですか?

ありがとう

13
user970956

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
    }
}
17
rintaro

スイフト2-4

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"
    }
  }
}
8
Daniel Krom

これにはmerge関数を使用できます。 https://github.com/SwiftyJSON/SwiftyJSON#merging

var array: JSON = [1, 2, 3]
array = try! array.merged(with: [4])
// -> [1, 2, 3, 4]
4
Lindemann
let jsonNewJSON:JSON = JSON(newData)
var arr:[JSON]=jsonOBJ.arrayValue
arr.append(jsonNewJSON)
var combinedOBJ = JSON(arr)

上記のコードを使用してswiftyjson配列に追加しました。まず、新しいデータをJSONオブジェクトに変換しました。次に、既存のJSONの配列を取得し、新しいJSONを追加します。配列をJSONオブジェクトに変換し直しました。確かにすばらしいコードではありませんが、ここではパフォーマンスは必要ありませんでした。

3
yeahdixon

_self.hoge_は、Swift配列(varとして宣言されている場合は変更可能)またはNSMutableArrayにキャストする必要があります。配列タイプの場合は、appendを使用します。NSMutableArrayにキャストする場合は、self.hoge.addObject(yourObject)

0
Nikos M.

メインのJSON配列を次のように宣言します。

var data:[JSON] = []

データソースが他のオブジェクト(レルムなど)の場合は、forループを使用してループしますが、データソースが別のJSON配列の場合は、次を実行します。

func setData(){
        data = []
        if let items = sourceData.array {
            for item in items {
              data.append(item)
            }
        }
        collectionView.reloadData()
    }
0
Moonis Abidi