Запрос Swift-Alamofire не выполняется из-за неправильного формата параметров в json и словаре - PullRequest
0 голосов
/ 26 июня 2019

У меня есть класс модели, имя которого - UserList, и он имеет идентификатор, код, [Friends] в виде массива. В этом случае Friends тоже модельный класс. Атрибуты класса друзей: имя, фамилия, адрес электронной почты, компания, телефон.

class Friends: NSObject,Codable,Mappable {

    var phone = String()
    var name = String()
    var surname = String()
    var company = String()
    var email = String()

    required init?(map: Map){

    }
    override init() {

    }

    func mapping(map: Map) {
     name <- map["name"]
     email <- map["email"]
     company <- map["company"]
     surname <- map["surname"]
     phone <- map["phone"]
    }
}

class UserList: NSObject,Codable,Mappable {

    var friendsList = [Friends]()
    var code = Int()
    var id = String()

    required init?(map: Map){

    }
    override init() {

    }

    func mapping(map: Map) {
      id <- map["id"]
      code <- map["code"]
      friendsList <- map["friendsList"]
    }
}

Я получаю класс UserList следующим образом:

let contacts = UserList()

orderedContacts.forEach({
    for record in $0.value {
        let contact = Friends()
         contact.name = record.givenName
         contact.surname = record.familyName
         contact.email = (record.emailAddresses.first?.value as String?) ?? ""
         contact.company = record.organizationName
         contact.phone = (record.phoneNumbers.first?.value.stringValue) ?? ""
         contacts.friendsList.append(contact)
    }
})

contacts.id = "57459bd9-f4c6-4fca-b5a4-6b4bc603b64c"
contacts.code = "BFF"

После всего этого у меня есть строка JSON, которую я преобразовал с помощью SwiftyJSON. Это преобразование дает мне правильную строку JSON. Нет проблем. После этого я должен преобразовать эту строку json в словарь как Dictionary, чтобы передать ее в качестве параметра в запрос Alamofire.

let newJsonA  = contacts.toJSONString(prettyPrint: true)!
let newJson :Dictionary<String,Any>? = convertToDictionary(text: newJsonA) 

Когда я отправляю строку для преобразования, я вижу ее печать на консоли, например:

["Friends": <__NSArrayI 0x12aa96e00>(
{
    name = "First";
    email = "";
    company = "";
    surname = "Record";
    phone = "123456789";
},
{
    name = "Second";
    email = "";
    company = "";
    surname = "Record";
    phone = "987654321";
}
)
"code": "BFF", 
"id": "57459bd9-f4c6-4fca-b5a4-6b4bc603b64c" ]

Как видите, json не в правильном формате. После преобразования словаря в словарь добавляется «<__ NSArrayI 0x12aa96e00> (». Это приводит к сбою запроса Alamofire, например:

Error Domain=com.alamofireobjectmapper.error Code=2 "ObjectMapper failed to serialize response." UserInfo={NSLocalizedFailureReason=ObjectMapper failed to serialize response.}

Я уверен, что правильно отображаю значение ответа. Я думаю, что проблема в массиве словаря JSON, который я посылаю в качестве параметра. Кто-нибудь сталкивался с этой проблемой?

...