【问题标题】:SWIFT : Cannot assign value of type ... / SwiftyJSONSWIFT:无法分配类型的值... / SwiftyJSON
【发布时间】:2016-06-20 09:49:49
【问题描述】:

我对 PushRow 有一点问题。 我通过 JSON 检索我的值,但我不能将它们放在 PushRow 中:/

我的价值观:

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

1/ 声明一个结构来保存 id 和 value:

struct MyStruct {
    var id: Int
    var value: String

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

2/ 使其符合 Equatable

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

你有什么想法可以帮助我吗?

【问题讨论】:

    标签: ios type-conversion swifty-json eureka-forms


    【解决方案1】:

    解决方案#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
    }
    

    【讨论】:

      【解决方案2】:

      现在,如果您想检索选择的 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)")
            }
         }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多