首页 > 解决方案 > 'subscript(_:)' 的模糊使用

问题描述

func getCurrency()
    {

        let myLink:[String] = ["url1", "url2", "url3"]
        for link in myLink{
            let url = URL(string: link)
            let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
                if error != nil{
                    print("ERROR")
                }
                else{
                    if let content = data{
                        do{
                            if link == myLink[0]{
                                let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

                                if let ratesusd = myJson["INR_USD"] as? Double{
                                    self.usdValue = ratesusd
                                }
                            }
                            else if link == myLink[1]{
                                let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

                                if let rateseuro = myJson["INR_EUR"] as? Double{
                                    self.euroValue = rateseuro
                                }
                            }
                            else if link == myLink[2]{
                                let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

                                if let ratespound = myJson["INR_GBP"] as? Double{
                                    self.poundValue = ratespound
                                }
                            }


                        }
                        catch{

                        }
                    }
                }
                }
                task.resume()



        }
    }

此错误会定期显示。我已将其更改为if let content = data{if let content = data["content"] as? Double{但它显示另一个错误,即“可选类型'数据的值?' 必须解包以引用已包装的基本类型“数据”的成员“下标”。我在包括stackoverflow在内的许多网站上看到了一些相关的查询,但它们是MacOS的,但我正在使用WatchOS。任何人请帮忙!

标签: iosswiftxcodeapple-watchwatchos

解决方案


JSON 对象永远不会未指定AnyObject。如果您期望字典将其转换为字典

let myJson = try JSONSerialization.jsonObject(with: content) as! [String:Any]

这修复了错误,因为编译器现在知道真实类型。

并且从不指定.mutableContainers. 该选项在 Swift 中无效


推荐阅读