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'没有下标会员。请帮我整理这个问题。提前预订...
答案 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语句并完成同样的事情)