Ios 无法强制转换类型为'__NSSingleObjectArrayI';至';NSDictionary';迅速地
当我解析Api时,我得到响应并将完整响应存储到Dictionary,然后我将其拆分为array和Dictionary,但我得到错误,因此请帮助解决错误 在这里,我给出了我所尝试的代码Ios 无法强制转换类型为'__NSSingleObjectArrayI';至';NSDictionary';迅速地,ios,swift,nsdictionary,Ios,Swift,Nsdictionary,当我解析Api时,我得到响应并将完整响应存储到Dictionary,然后我将其拆分为array和Dictionary,但我得到错误,因此请帮助解决错误 在这里,我给出了我所尝试的代码 let responseDictionary:NSDictionary = responseObject as! NSDictionary print(responseDictionary) if let statusCode:NSNumber = responseDictionar
let responseDictionary:NSDictionary = responseObject as! NSDictionary
print(responseDictionary)
if let statusCode:NSNumber = responseDictionary.value(forKey: "success") as? NSNumber{
if statusCode == 1{
print("statusCode :",statusCode)
let incomingRequetArray:NSArray = responseDictionary.value(forKey: "incoming_requests") as! NSArray
print("incomingRequetArray",incomingRequetArray)
if (incomingRequetArray.count > 0)
{
let requestDataDict:NSDictionary = incomingRequetArray.value(forKey: "request_data") as! NSDictionary -----> Error in this line
print("requestDataDict",requestDataDict)
let ownerArray:NSArray = requestDataDict.value(forKey: "owner") as! NSArray
print("ownerArray",ownerArray)
self.mutDictOwner = ownerArray.object(at: 0) as! NSMutableDictionary
}
}
负责医疗的是
"incoming_requests" = (
{
datetime = "2017-04-17 12:25:58";
later = 0;
"request_data" = {
dog = (
);
owner = {
address = "";
"d_latitude" = "0.00000000";
"d_longitude" = "0.00000000";
"dest_latitude" = "0.00000000";
"dest_longitude" = "0.00000000";
latitude = "11.01449160";
longitude = "76.98273220";
name = "Sss Sas";
"num_rating" = 0;
"payment_type" = 1;
phone = "+919123456789";
picture = "";
rating = "0.00";
};
"payment_mode" = 1;
};
"request_id" = 1474;
"request_services" = 30;
"time_left_to_respond" = 21;
}
);
"is_approved" = 1;
"is_approved_txt" = Approved;
"is_available" = 1;
success = 1;
在引发错误的行中,尝试将
incomingrequetaray.value…
更改为incomingrequetaray[0].value…
因为您需要访问数组中包含的内部字典,然后查询给定键的值。在引发错误的行中,尝试将incomingRequetArray.value…
更改为incomingRequetArray[0].value…
因为您需要访问数组中包含的内部字典,然后查询给定键的值。这是因为您的“请求数据”是一个对象而不是字典,请查看“传入的请求”是如何开始的(以“(”)开头)和“请求数据”是如何以“{”开头。要访问它,您可以执行以下操作
let requestDataDict:NSDictionary = incomingRequetArray.value(forKey: "request_data") as! [AnyObject]-----> Error in this line
print("requestDataDict",requestDataDict)
let x = requestDataDict[0] as! NSDictionary
let ownerArray:NSArray = x.value(forKey: "owner")as! NSArray
这是因为您的“request_data”是一个对象,而不是一个字典,请查看“incoming_request”是如何开始的(以“(”)开头),以及“request_data”是如何以“{”开头的。您可以这样访问
let requestDataDict:NSDictionary = incomingRequetArray.value(forKey: "request_data") as! [AnyObject]-----> Error in this line
print("requestDataDict",requestDataDict)
let x = requestDataDict[0] as! NSDictionary
let ownerArray:NSArray = x.value(forKey: "owner")as! NSArray
你们做错了,InMingRequetarray是NSArray,你们得到了钥匙的价值 写这个
let requestDataDict:NSDictionary = incomingRequetArray[0]as!NSDictionary
let newDict: NSDictionary = requestDataDict.object(forKey: "request_data")
print("newDict is ---%@", newDict)
您使用了NSDictionary和NSArray格式,因此我根据您的格式编写了代码。但是,为了在swift中进一步使用,请不要使用NSDictionary和NSArray。您的错误在于InMingRequeTarray是NSArray,并且您正在获取密钥的值 写这个
let requestDataDict:NSDictionary = incomingRequetArray[0]as!NSDictionary
let newDict: NSDictionary = requestDataDict.object(forKey: "request_data")
print("newDict is ---%@", newDict)
您使用了NSDictionary和NSArray格式,因此我根据您的格式编写了代码。但为了在swift中进一步使用,请不要使用NSDictionary和NSArray。这是一个合理的swift转录,解决了错误。它使用了一个类型别名以方便使用
typealias JSONDictionary = [String:Any]
let responseDictionary = responseObject as! JSONDictionary
print(responseDictionary)
if let success = responseDictionary["success"] as? Int, success == 1 {
print("statusCode :", success)
let incomingRequestArray = responseDictionary["incoming_requests" as! [JSONDictionary]
print("incomingRequetArray",incomingRequestArray)
if let requestDataDict = incomingRequestArray.first {
print("requestDataDict",requestDataDict)
if let ownerArray = requestDataDict["owner"] as? [JSONDictionary], !ownerArray.isEmpty {
print("ownerArray",ownerArray)
self.mutDictOwner = ownerArray[0] as! JSONDictionary
}
}
这是一个合理的Swift转录,解决了错误。为了方便起见,它使用了类型别名
typealias JSONDictionary = [String:Any]
let responseDictionary = responseObject as! JSONDictionary
print(responseDictionary)
if let success = responseDictionary["success"] as? Int, success == 1 {
print("statusCode :", success)
let incomingRequestArray = responseDictionary["incoming_requests" as! [JSONDictionary]
print("incomingRequetArray",incomingRequestArray)
if let requestDataDict = incomingRequestArray.first {
print("requestDataDict",requestDataDict)
if let ownerArray = requestDataDict["owner"] as? [JSONDictionary], !ownerArray.isEmpty {
print("ownerArray",ownerArray)
self.mutDictOwner = ownerArray[0] as! JSONDictionary
}
}
不要使用
valueForKey
(从最广泛的意义上说,这会导致错误),使用键订阅。不要使用NSArray/NSDictionary
,使用Swift本机集合类型。根本不要在Swift中使用NSMutable…
集合类型。不要注释编译器可以推断的类型。不要使用valueForKey
(从最广泛的意义上讲,是导致错误的原因),使用密钥订阅。不要使用NSArray/NSDictionary
,使用Swift本机集合类型。不要在Swift中使用NSMutable…
集合类型。不要注释编译器可以推断的类型。谢谢这对我有帮助。谢谢这对我有帮助。谢谢这对我有帮助。我完全同意@Lalit jee的观点你不应该使用NSDictionary和NSArray,这对我很有帮助。我完全同意@Lalit jee关于你不应该使用NSDictionary和NSArray的观点