Доступ к структуре внутри структуры для возврата отсортированного массива - PullRequest
0 голосов
/ 03 ноября 2019

Я анализирую данные для моего объекта Users по URL-адресу JSON и пытаюсь вернуть объект, отсортированный по алфавиту по именам. У меня проблемы с доступом к свойству names внутри моего объекта Users. Я вложил свою структуру в структуру из-за структуры моего JSON. Я хотел бы вернуть массив, отсортированный в алфавитном порядке по именам в моем массиве sortedList.

     struct Response: Codable
 {
struct Users: Codable {
    var fullName :String
    var biography:String

    enum CodingKeys: String, CodingKey {
        case fullName = "full_name"
        case biography
    }
}

var users:[Users]
}


//   let sortedList = Response{ $0.fullName < $1.fullName }
//Cannot invoke initializer for type 'Response' with an argument list of type '((_, _) -> _)'


func parse(){
    guard let url = URL(string: "samplePage.json") else {return}
    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        guard let dataResponse = data,
            error == nil else {
                print(error?.localizedDescription ?? "Error")
                return }
        do{

            let response = try! JSONDecoder().decode(Response.self, from: dataResponse)
            for user in response.users{
                print(user.fullName)
                print(user.biography)
             let sortedArr = user.fullName.sorted{ $0.fullName < $1.fullName }
                //Value of type 'Character' has no member 'fullName'
            }
        } catch let parsingError {
            print("Error", parsingError)
        }
    }
    task.resume()
}

1 Ответ

1 голос
/ 03 ноября 2019

Для сортировки кода цели используйте вот так:

let sortedArr = response.users.sorted {$ 0.fullName <$ 1.fullName} </p>

без необходимости в цикле for.

обновленный код:

func parse(){
    guard let url = URL(string: "samplePage.json") else {return}
    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

    guard let dataResponse = data,
        error == nil else {
            print(error?.localizedDescription ?? "Error")
            return }
    do{

        let response = try! JSONDecoder().decode(Response.self, from: dataResponse)
        for user in response.users{
            print(user.fullName)
            print(user.biography)
        }
        // use code like this 
        let sortedArr = response.users.sorted{ $0.fullName < $1.fullName }
    } catch let parsingError {
        print("Error", parsingError)
    }
}
task.resume()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...