Swift3 无法为类型为[[String:Any]]的值下标类型为';字符串';-斯威夫特3

Swift3 无法为类型为[[String:Any]]的值下标类型为';字符串';-斯威夫特3,swift3,Swift3,我正在转换Swift 3中的代码,我在线路上遇到以下错误: let dicArray = serviceProvicedListArray?.objectEnumerator().allObjects as? [[String:Any]] let count = dicArray.map({ Int($0["lstActType"] as? String ?? "0")! }).first! 异常:无法为[[String:Any]]类型的值下标'String'类型的索引 请让我知道我哪里出

我正在转换Swift 3中的代码,我在线路上遇到以下错误:

 let dicArray = serviceProvicedListArray?.objectEnumerator().allObjects as? [[String:Any]]
 let count = dicArray.map({ Int($0["lstActType"] as? String ?? "0")! }).first!
异常:
无法为[[String:Any]]类型的值下标'String
'类型的索引

请让我知道我哪里出了问题,让我知道我如何解决同样的问题

在这一行中也会出现错误:

 let user_id=String(((data as AnyObject).value(forKey: "UserLoginResult") as AnyObject).value(forKey: "UserID") as! Int)


Exception: Optional chain has no effect expression already produced Any?
不明白我哪里出了问题

错误3:

 if(!((self.serviceProvided!.value(forKey: "Weekly")! as AnyObject).isKind(of: NSNull.self))){
                    let resultObject = self.serviceProvided!.value(forKey: "Weekly") as! NSDictionary
                    self.serviceProvicedListArray!.add(resultObject)
                    let resultObjectItems = self.serviceProvicedListArray!.value(forKey: "lstActType")

                    //print(resultObjectItems[0].count)
                    for i in 0..<resultObjectItems[0].count {
                    //for(var i=0; i<resultObjectItems[0].count; i += 1){
                        //let resultObjectItem = resultObjectItems[0][i] as! NSDictionary
                        let resultObjectItem = resultObjectItems[0][i] as AnyObject
                        self.serviceProvicedList!.add(resultObjectItem)
                    }

                    //print(self.serviceProvicedList)
                    self.serviceProvidedTableView.reloadData()
                }
if(!((self.serviceProvided!.value(forKey:“Weekly”)!as AnyObject.isKind(of:NSNull.self))){
让resultObject=self.serviceProvided!.value(forKey:“Weekly”)作为!NSDictionary
self.serviceProviderListArray!.add(resultObject)
让resultObjectItems=self.serviceProviderListArray!.value(forKey:“lsactType”)
//打印(resultObjectItems[0]。计数)

对于0中的i.您的
无序
是可选的,因此您需要使用
(可选)或
(强制)将其包装,然后在其上调用map

let dicArray = serviceProvicedListArray?.objectEnumerator().allObjects as? [[String:Any]]
let count = dicArray?.map({ Int($0["lstActType"] as? String ?? "0")! }).first!
击球手的方法是使用
guard
if let
包裹
digarray

guard let dicArray = serviceProvicedListArray?.objectEnumerator().allObjects as? [[String:Any]] else {
    print("Not array of dictionary")
    return
}
guard let count = dicArray.map({ Int($0["lstActType"] as? String ?? "0")! }).first else {
    return
}
print(count)
或者您可以在单个
guard
语句中添加
guard let
语句,如

guard let dicArray = serviceProvicedListArray?.objectEnumerator().allObjects as? [[String:Any]],
      let count = dicArray.map({ Int($0["lstActType"] as? String ?? "0")! }).first else {
    return
}
print(count)
编辑:您面临此问题的原因可能是因为您正在使用
NSDictionary
NSArray
,如果您使用swift的本机类型,您将很容易获取/访问值。您可以这样获取
用户ID

guard let dict = data as? [String:Any],
      let loginDict = dict["UserLoginResult"] as? [String:Any],
      let userId = loginDict["UserID"] as? Int else {
    return
}
let strUserId = String(userId)
if let resultObjectItems = self.serviceProvicedListArray!.value(forKey: "lstActType") as? [[[String:Any]]] {
    for i in 0..<resultObjectItems[0].count {         
        let resultObjectItem = resultObjectItems[0][i] as AnyObject
        self.serviceProvicedList!.add(resultObjectItem)
    }
}
编辑:问题是您需要告诉编译器对象的类型
resultObjectItems
array,所以请这样尝试

guard let dict = data as? [String:Any],
      let loginDict = dict["UserLoginResult"] as? [String:Any],
      let userId = loginDict["UserID"] as? Int else {
    return
}
let strUserId = String(userId)
if let resultObjectItems = self.serviceProvicedListArray!.value(forKey: "lstActType") as? [[[String:Any]]] {
    for i in 0..<resultObjectItems[0].count {         
        let resultObjectItem = resultObjectItems[0][i] as AnyObject
        self.serviceProvicedList!.add(resultObjectItem)
    }
}
如果让resultObjectItems=self.serviceProviderListArray!.value(forKey:“lstActType”)作为?[[String:Any]]{

对于0中的我..感谢您的及时回复!我已编辑了我的问题,并在另一行面对一个查询。您可以查看吗。?和建议感谢您的回复对我有效Swift 3语法在您开始时很混乱,如果有任何问题,将需要您的帮助help@RaghavChopra当然会帮助你,只要给我你的n的链接ew post(问题)。@RaghavChopra对于新问题,您需要添加新问题或编辑您的问题。@RaghavChopra检查编辑的答案。如果您有任何其他错误,您需要在此处添加新问题,而不是编辑此问题。