Ios 无法强制转换类型为'__NSSingleObjectArrayI';至';NSDictionary';迅速地

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

当我解析Api时,我得到响应并将完整响应存储到Dictionary,然后我将其拆分为array和Dictionary,但我得到错误,因此请帮助解决错误

在这里,我给出了我所尝试的代码

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的观点