Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更新swift 3中的字典值_Ios_Iphone_Swift_Dictionary_Swift3 - Fatal编程技术网

Ios 更新swift 3中的字典值

Ios 更新swift 3中的字典值,ios,iphone,swift,dictionary,swift3,Ios,Iphone,Swift,Dictionary,Swift3,我需要更新特定密钥的内容**(“IsFavorit”)***,如何在swift 3中实现?仅将responseData->index[1]->comeetic[]->“isfavorit”null更新为1 我可以这样设置字典的值 responseData[1][喜剧]![0][“IsFavorit”]=1无法在swift3中工作 如何将“IsFavorit”值设置为1 我只是试了一下 { "error": false, "error_msg": "Get trending data.",

我需要更新特定密钥的内容
**(“IsFavorit”)***
,如何在swift 3中实现?仅将
responseData->index[1]->comeetic[]->“isfavorit”null更新为1

我可以这样设置字典的值
responseData[1][喜剧]![0][“IsFavorit”]=1
无法在swift3中工作

如何将“IsFavorit”值设置为1

我只是试了一下

{
  "error": false,
  "error_msg": "Get trending data.",
  "Total_category": 2,
  "responseData": [
    {
      "categoryName": "Trending",
      "Trending": [
        {
          "category": "Trending",
          "trailerPrice": "",
          "isFavourit": null,
          "isWatchlist": null
        }
      ]
    },
    {
      "categoryName": "Comedy",
      "Comedy": [
        {
          "category": "Comedy",
          "trailerPrice": "",
          "isFavourit": null,
          "isWatchlist": null
        }
      ]
    }

  ]
}
(arrVideoDetail[1][“喜剧”]as![Dictionary])[0][“IsFavorit”]=1

上面的代码显示错误无法分配给类型为“Any?”的不可变表达式。

这是非常糟糕的JSON。问题是
responseData
数组中的字典没有一致的键。第一个有钥匙

(arrVideoDetail[1]["comedy"] as! [Dictionary<String,Any>])[0]["isFavourit"] = 1
但是第二个有钥匙

  "categoryName": "Trending",
  "Trending": [
这意味着在拉出
categoryName
键的值之前,您不知道第二个键的名称。所以你必须停下来,然后才能继续

因此,假设您的JSON是一个名为
JSON
的字符串。然后:

  "categoryName": "Comedy",
  "Comedy": [

配置完结构后,解析整个JSON只需一行代码!假设您的JSON位于名为
JSON
的变量中:

struct MyJson : Decodable {
    let error : Bool
    let error_msg : String
    let Total_category : Int
    let responseData : [ResponseData]
    struct ResponseData : Codable {
        let categoryName : String
        let unknown : [Inner]
        struct Inner : Codable {
            let category : String
            let trailerPrice : String
            let isFavourit : String?
            let isWatchList : String?
        }
        private struct CK : CodingKey {
            var stringValue: String
            init?(stringValue: String) { self.stringValue = stringValue }
            var intValue: Int?
            init?(intValue: Int) { return nil }
        }
        init(from decoder: Decoder) throws {
            let con = try! decoder.container(keyedBy: CK.self)
            self.categoryName = try! con.decode(String.self, forKey:CK(stringValue:"categoryName")!)
            let key = self.categoryName
            self.unknown = try! con.decode([Inner].self, forKey: CK(stringValue:key)!)
        }
    }
}
您试图访问的值可以非常简单地表达:

let myjson = try JSONDecoder().decode(MyJson.self, from: json.data(using: .utf8)!)
所以我所要做的就是把我所有的
let
转换成
var
,现在它们都可以设置了,就像你试图做的那样


(有关此解决方案的更多信息,请参阅。)

请显示一些代码。您尝试了哪些代码?是否尝试搜索堆栈溢出?您无法找到管理此类JSON数据的任何内容。请考虑将类别映射到自定义对象(结构或类)和名称<代码> IsAdvIs< /Cl>意味着“代码> Boo.<代码>,而不是<代码> INT/C>。共享您所尝试的和您所得到的错误。@ USER1000请检查代码。
let myjson = try JSONDecoder().decode(MyJson.self, from: json.data(using: .utf8)!)
let fav = myjson.responseData[1].unknown[0].isFavourit