作为swiftUI开发的新手,目前还不太了解,如果这个问题已经得到了回答,我很抱歉,但我找不到(或至少不理解)任何东西来解决我的问题。为了练习,我试图创建第一个应用程序,一个标志测验。虽然可能很容易做到,但我很难回答这两个问题:
1.存储旗帜图像的最佳解决方案是什么?如果我需要为应用程序创建更多功能,将其存储在资产文件夹中,尝试从API中检索它们或将其存储在免费的后端服务中,如Firebase?
1.我去了我这边的API解决方案,但我很难得到它正确地完成.我想有一个数组的“标志”结构允许我随机选择一个“标志”显示在视图中与其相关联的“shortName”(从URL检索正确的标志)和“名称”.这是我到目前为止:
import Foundation
let decoder = JSONDecoder()
struct Flag: Codable, Identifiable {
var flagLink: String
var flagDetails: FlagDetails
var id = UUID()
init(flagLink: String, flagDetails: FlagDetails) {
self.flagDetails = flagDetails
self.flagLink = "https://flagcdn.com/w320/\(flagDetails.shortName).png"
}
}
struct FlagDetails: Codable {
var shortName: String
var name: String
}
func getJSON(){
guard let urlJSON = URL(string: "https://flagcdn.com/fr/codes.json") else {
print("Invalid URL")
return
}
URLSession.shared.dataTask(with: urlJSON) { (data, response, error) -> Void in
if error == nil && data != nil {
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String: Any]
print()
} catch {
print("Invalid data: \(error)")
}
}
}.resume()
}
网站提供的JSON文件如下格式:
{
"ad": "Andorra",
"af": "Afghanistan",
"ag": "Antigua-et-Barbuda",
"ai": "Anguilla"
}
创建字典后,我想将CodingKey分配给“shortName”,将CodingKey的值分配给“name”,以便在从视图中请求随机问题时正确初始化链接。我很确定这绝对不是最好的方法,但作为一个真正的初学者,使用JSON文件可以帮助我很多。
非常感谢您提供的任何帮助!
1条答案
按热度按时间thtygnil1#
1.我会使用一个框架来下载图像,比如Kingfisher或ImageLoaderSwift。
1.至于回答你的第二个问题:
您可以使用
for KEY in DICTIONARY
遍历字典,然后将值添加到数组(countryFlags
)中。只有当你可以直接将json字符串转换为结构体时,你才需要Codable,在这种情况下你不能,因为你需要一个数组而不是字典。
请注意,我没有Mac,所以我不能测试代码。