首页 > 解决方案 > 将 URL 的常量部分作为对所有视图控制器可用的变量

问题描述

我目前通过从 URL 加载信息来表达 JSON 数据,URL 来自两种形式的 API:

test.example.comexample.com

整个应用程序中的完整链接在正斜杠之后总是以不同的方式结束:

test.example.com/example1...test.example.com/example2

但开头永远是上述两种形式之一

我希望能够通过使用可能适用于所有视图控制器的扩展在一个地方更改它来轻松地在两个 URL 之间切换。

所以例如我有:

private func JSON() {
    guard let url = URL(string: "https://test.example.com/example"),
        let sample = value1.addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed)
        else { return }
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.httpBody = "example1=\(example)".data(using: .utf8)
    URLSession.shared.dataTask(with: request) { data, _, error in
        guard let data = data else { return }
        do {
            self.JStruct = try JSONDecoder().decode([exampleStruct].self,from:data)
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
        catch {

            print(error)
        }

        }.resume()
}

在两个网址之间切换的最佳方法是什么?

更新:

只使用:

struct URLVar {
    static var url = "https://example1.com/example/"
}

并在需要时参考 URLVar.url?

标签: swift

解决方案


我通常做的是维护一个 api.plist 文件(一个键值文件存储)和一个 environment.plist 文件。API 的结尾部分将存储在 api.plist 中,而域部分example.com将存储在 environment.plist 中。

请注意,这样,我可以有多个 environment.plist 文件指向不同的位置(生产服务器、登台服务器等)。我可以使用构建脚本阶段简单地切换到必要的 environment.plist 中。

为了阅读,我使用了苹果提供的普通 plist 阅读机制,并将 domainUrl(在 environment.plist 中)与所需的资源路径(在 api.plist 中)结合起来。以下链接将为您探索阅读选项: https ://learnappmaking.com/plist-property-list-swift-how-to/

您还可以查看以下库,它为 .plist 文件添加了一些漂亮的代码生成功能: https ://github.com/SwiftGen/SwiftGen


推荐阅读