0

PushRow に少し問題があります。JSON 経由で値を取得しますが、PushRow に入れることができません:/

私の価値観:

{
"listValue": [{
    "id": 1,
    "value": "Value 1"
},{
    "id": 2,
    "value": "Value 2"
},{
    "id": 3,
    "value": "Value 3"
}]
}

1/ ID と値を保持する構造体を宣言します。

struct MyStruct {
    var id: Int
    var value: String

    init(id: Int, value: String) {
        self.id = id
        self.value = value
    }
}

2/ 適合させる

struct MyStruct {
    var id: Int
    var value: String

    init(id: Int, value: String) {
        self.id = id
        self.value = value
    }
}

extension MyStruct: Equatable {}

func ==(lhs: MyStruct, rhs: MyStruct) -> Bool {
    let areEqual = lhs.id == rhs.id &&
        lhs.value == rhs.value

    return areEqual
}

3/ MyStruct を CustomStringConvertible に準拠させる

struct MyStruct : CustomStringConvertible {
    var id: Int
    var value: String

    init(id: Int, value: String) {
        self.id = id
        self.value = value
    }

    var description: String {
        return "\(self.id)"+" "+"\(self.value)"
    }

}

extension MyStruct: Equatable {}

func ==(lhs: MyStruct, rhs: MyStruct) -> Bool {
    let areEqual = lhs.id == rhs.id &&
        lhs.value == rhs.value

    return areEqual
}

そして今、json の listValue 応答を MyStruct の配列に変換する際に問題があります.. (タイプ '[String : JSON]' の値をタイプ '[MyStruct]' に代入できません)

私のコードでは、Eurekaを使用しています

<<< PushRow<MyStruct>(idItem) {
   $0.title = item["libItem"].stringValue
   $0.options = item["listValue"].dictionaryValue

私の listValue は JSON です ( SwiftyJSONを使用)

私を助けるアイデアはありますか?

4

2 に答える 2

0

解決策#1(構造体あり):

struct MyStruct : CustomStringConvertible {

    var id: Int
    var value: String

    init(id: Int, value: String) {
        self.id = id
        self.value = value
    }

    var description: String {
        //return "\(self.id)"+" "+"\(self.value)"
        return "\(self.value)"
    }

}

extension MyStruct: Equatable {}

func ==(lhs: MyStruct, rhs: MyStruct) -> Bool {
    let areEqual = lhs.id == rhs.id &&
        lhs.value == rhs.value
    return areEqual
}

var arrayOfMyStruct:[MyStruct] = []
for item in item["listValue"].arrayValue {
    print(item["id"].intValue)
    print(item["value"].stringValue)
    print("#############")
    arrayOfMyStruct.append(MyStruct(id: item["id"].intValue, value: item["value"].stringValue))
}

form.last! // recupère la dernière section
    <<< PushRow<MyStruct>(idItem) {
        $0.title = item["libItem"].stringValue
        $0.options = arrayOfMyStruct
    }

それはうまくいきます!

解決策 #2 (アレイあり):

var Liste : [String] = []
for (idvaleur,TabValeur):(String, JSON) in item["listValue"] {
          print(TabValeur["id"])
          print(TabValeur["value"])
          print("#######")
          Liste.append(TabValeur["value"].stringValue)
}

print(Liste)

form.last! // recupère la dernière section
<<< PushRow<String>(idItem) {
     $0.title = item["libItem"].stringValue
     $0.options = Liste
}
于 2016-06-24T13:09:26.823 に答える
0

そして今、選択のIDを取得したい場合(表示されているものではなく..つまり値)

let valeursFormulaire = self.form.values(includeHidden: true)

for (idvaleur,valeur):(String, Any?) in valeursFormulaire {
    if let laValeur = valeur {

       let typeDeChamps = String(laValeur.dynamicType)

       switch(typeDeChamps){

           case "MyStruct":
                if let rowValue = self.form.rowByTag(idvaleur)?.baseValue as? MyStruct {
                   print("\(rowValue.id)") // id here :)
                }

           default:
                print("\(idvaleur)"+" "+"\(laValeur)")
      }
   }
}
于 2016-06-24T15:15:15.230 に答える