Возникли проблемы с доступом к API через data.nba.net - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть URL-адрес, сохраненный в info.plist следующим образом: BASE_URL <-> String <-> $ (BASE_URL)

и в настройках сборки моего проекта я добавил пользовательский параметр как таковой : BASE_URL http://data.nba.net

После настройки, когда я пытаюсь вставить веб-сайт в переменную url, переменная возвращает "". Когда я устраняю проблему, я не вижу веб-сайт, хранящийся под этой переменной.

Я новичок в Swift и все еще учусь, поэтому любые комментарии о том, как я настроил мои структуры, также будут оценены.

import UIKit

struct sports_content: Decodable {
    let sports_meta_expanded: sports_meta
    let teams_expanded: teams
}

struct sports_meta: Decodable {
    let date_time: String?
    let season_meta_list: season_meta
}

struct season_meta: Decodable {
    let calendar_date: Date
    let season_year: Int?
    let stats_season_year: Int?
    let stats_season_id: Int?
    let stats_season_stage: Int?
    let roster_season_year: Int?
    let schedule_season_year: Int?
    let standings_season_year: Int?
    let season_id: Int?
    let display_year: String
    let display_season: String
    let season_stage: Int?
}

struct next: Decodable {
    let url: String
}

struct teams: Decodable {
    let season_year: year
    let team_data: [team]
}

struct year: Decodable {
    let season_year: Int?
}

struct team: Decodable {
    let is_nba_team: Bool
    let team_name: String
    let team_nickname: String
    let team_code: String
    let team_abbrev: String
    let city: String
    let state: String
    let team_short_name: String
    let team_id: Int?
    let conference: String
    let division_id: String
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        let url = Bundle.main.infoDictionary?["BASE_URL"] as? String ?? ""

        guard let convertedURL = URL(string: url) else {
            return
        }

        URLSession.shared.dataTask(with: convertedURL) { (data, response, error) in
        guard let data = data else {
            return
        }
        do{
            let dataSet = try JSONDecoder().decode(sports_content.self, from: data)
            print(dataSet)
        } catch {
            print("JSONSerialization error:", error)
        }
        }.resume()
    }


}

1 Ответ

0 голосов
/ 06 февраля 2020

Параметр сборки используется во время сборки / компиляции и не обязательно во время выполнения.

Чтобы вставить свой URL в infoDictionary, вам нужно добавить его в файл Info.plist. Дважды щелкните ваш Info.plist, чтобы открыть представление в вашем Xcode, затем нажмите «Добавить значение» в меню редактора, затем вы можете добавить BASE_URL в качестве ключа и ваш URL в качестве значения.

add item to Info.plist

Попробуйте использовать $ (BASE_URL) в качестве значения в вашем Info.plist и посмотрите, будут ли добавлены ваши параметры сборки во время сборки. :)

...