swift - JSON 与 SwiftUI 使用数组
问题描述
我是 SwiftUI 的新手,之前只使用过 UIKit。我尝试使用 JSON 显示标题,但所有教程视频都使用列表。我不想使用任何带有 JSON 的列表来显示所有数据。只想获取例如标题的第二个或特定数组。
如何删除 SwiftUI 中的列表?我的观点:
struct ContentView: View {
@ObservedObject var networkManager = NetworkManager()
var body: some View {
NavigationView {
List(networkManager.posts) { post in
HStack {
Text(String(post.points))
Text(post.title)
}}
.navigationBarTitle("H4X0R NEWS")
}
.onAppear {
self.networkManager.fetchData()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
网络管理器:
class NetworkManager: ObservableObject {
@Published var posts = [Post]()
func fetchData() {
if let url = URL(string: "https://hn.algolia.com/api/v1/search?tags=front_page") {
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url) { (data, response, error) in
if error == nil {
let decoder = JSONDecoder()
if let safeData = data {
do {
let results = try decoder.decode(Results.self, from: safeData)
DispatchQueue.main.async {
self.posts = results.hits
}
} catch {
print(error)
}
}
}
}
task.resume()
}
}
}
还有我的 Json 结构文件:
struct Results: Decodable {
let hits: [Post]
}
struct Post: Decodable, Identifiable {
var id: String {
return objectID
}
let objectID: String
let points: Int
let title: String
}
解决方案
我不想使用任何带有 JSON 的列表来显示所有数据。只想获取例如标题的第二个或特定数组。
您可以使用计算属性来访问数组中的特定元素(及其标题)posts
:
struct ContentView: View {
@ObservedObject var networkManager = NetworkManager()
// return the title of the second item in the `posts` array
var title: String {
guard networkManager.posts.count >= 2 else {
// decide what to do when data is not yet loaded or count is <= 1
return "Loading..."
}
return networkManager.posts[1].title
}
var body: some View {
NavigationView {
Text(title)
.navigationBarTitle("H4X0R NEWS")
}
.onAppear {
self.networkManager.fetchData()
}
}
}
推荐阅读
- c++ - 从变量对象指向基础对象
- swift - 尝试从 WWDC 会话重新创建基于 SwiftUI 的应用程序时的问题
- excel - 如何使用文本坐标解析 XML
- c++ - C++ Poco SQL 查询不返回带有“介于”和“和”日期时间绑定的结果
- embedded - 使用 STM32 WebServer 加载网页内容
- clickhouse - 有没有办法在clickhouse中进行分片?
- powershell - 根据本地主机名设置特定变量
- azure-active-directory - 如何跨多个应用程序管理 Azure AD 应用角色
- c - 这些使我的程序停止运行的 for 循环有什么问题?
- javascript - React/React Hooks:每当用户离开输入字段时,我都会尝试使用钩子触发验证