Получить данные из URL с параметрами Swift - PullRequest
0 голосов
/ 06 апреля 2019

Мне нужно получить данные из URL. Например, используя почтальон, если я попытаюсь получить запрос с этим моим личным url = "http://127.0.0.1/MyWebService/api/fetch_image.php" и добавить в параметры: id_key -> id_team в значении -> 2 программное обеспечение возвращает это мне:

{ "image_team": [{ "ID": 1, "IMG_PATH": "http://localhost/MyWebService/images/Schermata.png","id_team":2},{"id":2,"img_path":"http://localhost/MyWebService/images/Schermata.png","id_team":2},{"id":3,"img_path":"http://localhost/MyWebService/images/Schermata.png","id_team":2}]}

сейчас в Swift я написал эти классы:

class ClassJsonTeam: Codable {

private var teams: [JsonTeam]

init(teams: [JsonTeam]) {
    self.teams = teams
}

func getTeams()-> [JsonTeam]{
    return(self.teams);
}

func setTeams(teams:[JsonTeam]){
    self.teams = teams;
}

}

class JsonTeam: Codable {
private let id: Int
private var name: String
private var member: Int

init(id: Int, name: String, member: Int) {
    self.id = id
    self.name = name
    self.member = member
}

func getId()->Int{
    return(self.id);
}

func setId(id:Int){
    self.member = id;
}

func getName()->String{
    return(self.name);
}

func setName(name:String){
    self.name = name;
}

func getMembers()->Int{
    return(self.member);
}

func setMembers(members:Int){
    self.member = members;
}    
}

Вопрос: как мне сделать запрос и сохранить дату в классе?

(я использую Swift 4)

1 Ответ

3 голосов
/ 06 апреля 2019

Извините, но это ужасный код цели + 1002 * кода.

Очевидно, что вам нужны константы в ваших классах, поэтому объявляйте константы, и почти во всех случаях вам вообще не нужны классы

struct Response: Decodable {
    let teams: [Team]

    private enum CodingKeys : String, CodingKey { case teams = "image_team" }
}

struct Team: Decodable {
    let id: Int
    let imagePath: URL
    let teamID: Int

    private enum CodingKeys : String, CodingKey { case id, imagePath = "img_path", teamID = "id_team" }
}

Вот и все.Ничего больше.Никаких странных общественных и частных установщиков.Нет инициализаторов при работе с (De)codable.И если вы будете использовать swiftier keys, вы можете полностью пропустить объявления CodingKeys.Ключ imagePath можно даже расшифровать как URL.

И, наконец, без запятой!

Для чтения данных используйте традиционные URLSession

let url = URL(string: "http://127.0.0.1/MyWebService/api/fetch_image.php")!
let dataTask = URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error { 
       print(error) 
       return 
    }
    do {
        let result = try JSONDecoder().decode(Response.self, from: data!)
        print(result)
    } catch {
        print(error)
    }
}
dataTask.resume()

Чтобы добавить параметры, вы должны добавить query к URL-адресу, например

http://127.0.0.1/MyWebService/api/fetch_image.php?id_team=2

, но это зависит от вашего бэкэнда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...