【问题标题】:Having trouble accessing the API via data.nba.net通过 data.nba.net 访问 API 时遇到问题
【发布时间】:2020-05-22 05:56:38
【问题描述】:

我将 URL 保存在 info.plist 中,如下所示: BASE_URL 字符串 $(BASE_URL)

在我的项目的构建设置中,我添加了一个用户定义的设置,如下所示: BASE_URL http://data.nba.net

设置后,当我尝试将网站放入 url 变量时,该变量返回“”。在调试问题时,我看不到存储在该变量下的网站。

我是 Swift 的新手,还在学习,所以我设置结构的过程中的任何 cmets 都会受到赞赏。

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()
    }


}

【问题讨论】:

    标签: ios xcode11 swift5


    【解决方案1】:

    构建设置在构建/编译时使用,不一定在运行时使用。

    要将您的 URL 放入 infoDictionary,您需要将其添加到 Info.plist 文件中。双击 Info.plist 以在 Xcode 中打开视图,然后单击 Editor 菜单下的“Add Value”,然后您可以添加 BASE_URL 作为键和您的 URL 作为值。

    尝试使用 $(BASE_URL) 作为 Info.plist 中的值,看看是否在构建时添加了构建设置。 :)

    【讨论】:

    • 嘿迈克尔,谢谢 - 我试过了,在我的代码中,url 变量不包含链接。此外,当我将断点放在 line 守卫上时, let convertURL = URL(string: url) else 这是我得到的错误 - 表达式产生错误:错误:执行被中断,原因:EXC_BAD_ACCESS(代码=1,地址=0x7fbccd54e7b0)。我该如何处理?
    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2017-05-17
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多