首页 > 解决方案 > 来自alamofire swift3的失败响应

问题描述

你好,我被 alamofire 困住了。

    let keys = [CNContactPhoneNumbersKey, CNContactGivenNameKey]
    let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
    let contactStore = CNContactStore()
    do {
        try contactStore.enumerateContacts(with: request) {
            (contact, stop) in
            // Array containing all unified contacts from everywhere
            self.contacts.append(contact)
        }
    }
    catch {
        print("unable to fetch contacts")
    }
    var contactArray = [[String:String]]()

    for i in 0..<contacts.count{
        var mobiles = ""
        for num in contacts[i].phoneNumbers {

            mobiles = num.value.stringValue
        }



        var theDict = ["contact_id": "\(i)", "full_name": contacts[i].givenName, "mobile_number": "\(mobiles)"]
        contactArray.append(theDict)

    }

    dictParams["contacts"] = dictContacts



    let theParams = ["contacts":contactArray] as [String:AnyObject]
    print("dict theParams: \(theParams)")

这是打印的参数

dict theParams: ["contacts": <Swift._SwiftDeferredNSArray 0x604000233280>(
{
    "contact_id" = 0;
    "full_name" = Kate;
    "mobile_number" = "62123123";
},
{
    "contact_id" = 1;
    "full_name" = Daniel;
    "mobile_number" = "621231123";
},
{
    "contact_id" = 2;
    "full_name" = John;
    "mobile_number" = "625435345";
}
)
]

我用这个代码把它发送到alamofire

func sendFriendList(dictContacts: [String:AnyObject] ,successBlock:((_ isSuccess: Bool, _ theFriendsResponse: FriendsResponse)->Void)?,errorBlock:((_ errorString:String)->Void)? )-> Void
    {

Alamofire.request("url/ListRetrieve",
        method: .post,
        parameters: dictContacts,
        encoding: URLEncoding.default,
        headers: headers)
        .responseJSON { response in
            print("this is response retrieve \(response)")

以及来自alamofire的回应:

this is the response = retrieve FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 1." UserInfo={NSDebugDescription=Invalid value around character 1.}))

但是如果我更改参数只有这样的字符串 ["contacts":"test contact"]

alamofire 响应成功,它的工作。

请帮助我:)谢谢

标签: iosswiftdictionaryswift3alamofire

解决方案


使用responseString而不是responseJSON. 然后用于JSONSerialization将响应转换为JSON
就像是 :

JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]  


func convertToDictionary(text: String) -> [String: Any]? {
    if let data = text.data(using: .utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
        } catch {
            print(error.localizedDescription)
        }
    }
    return nil
}

推荐阅读