得到错误 - 输入'任何'没有下标成员 - swift3

时间:2017-03-04 10:52:49

标签: ios swift xcode swift3

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"]!["情感"]! as String" 我得到的错误就像Type' Any'没有下标会员。请帮我整理这个问题。提前预订...

1 个答案:

答案 0 :(得分:0)

您正在使用函数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个单独的guard语句来简化调试。你可以使用一个带有3个单独let语句的guard语句并完成同样的事情)