【问题标题】:getting error - Type 'Any' Has no Subscript Members - swift3 [duplicate]出现错误 - 类型“任何”没有下标成员 - swift3 [重复]
【发布时间】:2017-03-04 10:52:49
【问题描述】:
enter code here
@IBOutlet weak var textfield: UITextView!

@IBOutlet weak var label: UILabel!


var sentimentURL = "https://api.havenondemand.com/1/api/sync/analyzesentiment/v2?text=this+is+lethargic&apikey=e55bc0ff-70a5-4270-b464-aaaf3dfcc8de&text="
var sentimentResponse:NSDictionary!

func getSentiment() {
    var error:NSError?
    var encodedText = textfield.text.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)


    Get.JSON(url: sentimentURL+encodedText!) {
        (response) in
        self.sentimentResponse  = response

        DispatchQueue.main.async() {

            var agggregate = self.sentimentResponse["aggregate"]!["sentiment"]! as String
            self.label.text = agggregate

        }
    }
}

在这一行 " var agggregate = self.sentimentResponse["aggregate"]!["sentiment"]! as String" 我收到类似“任何”类型的错误没有下标成员。请帮我解决这个问题。提前谢谢...

【问题讨论】:

  • 我仍然没有得到错误请帮助解决这个错误@ericaya

标签: ios swift xcode swift3


【解决方案1】:

您正在使用函数Get.JSON。你没有告诉我们那是什么,或者响应将是什么数据类型。

我猜它是类型Any,或者可能是[String:Any]

您的代码 self.sentimentResponse["aggregate"]!["sentiment"]! 失败,因为编译器不知道 self.sentimentResponse 包含什么样的数据。

您可以尝试将其转换为正确的类型:

guard let typedResponse  = response as? [String: [String:String]] else {return}
self.sentimentResponse = typedResponse
guard let aggregate = typedResponse["aggregate"] else {return}
guard let sentiment = aggregate["sentiment"] else {return}
DispatchQueue.main.async() {
   self.label.text = sentiment
}

(在上面的代码中,我使用了 3 个独立的保护语句来简化调试。你可以使用一个保护语句和 3 个独立的 let 语句来完成同样的事情)

【讨论】:

  • 嘿@duncanc tanq 当我使用你的代码运行时回复我在第一行代码初始化程序中遇到此错误,用于条件绑定必须具有可选类型,而不是 [String: [String:String]]]
  • 对不起。在第一行中,as! 应该是 as?
  • tanq 兄弟现在可以正常工作了...
  • NP。如果它解决了您的问题,您应该接受我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
相关资源
最近更新 更多