已关闭,此问题为opinion-based。目前不接受答复。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。
4天前关闭。
Improve this question
我想问一个关于我的疑问的问题。
我目前正在使用两个数据模型结构和一个用于数据管理的FriendsManager
类来实现对JSON
文件进行解码的代码
在您看来,这是一个好的方法吗?或者我应该使用structs
而不是使用class
?
我是一个解码JSON
文件的新手,我想确保我的代码是正确的
private let JSONFriendFileName = "Friends"
class FriendsManager: ObservableObject {
var friendsList: [FriendsList] = []
init() {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
decode(fileName: JSONFriendFileName, decoder: decoder)
}
func decode(fileName: String, decoder: JSONDecoder) {
guard let url = Bundle.main.url(forResource: JSONFriendFileName, withExtension: "json") else {
print("Non esiste alcun file denominato \(JSONFriendFileName + ".json") in questo progetto")
return
}
do {
let data = try Data(contentsOf: url)
let items = try decoder.decode(Friends.self, from: data)
friendsList = items.friendsList
} catch {
print(error.localizedDescription)
}
}
}
struct Friends: Codable {
var friendsList: [FriendsList]
}
struct FriendsList: Codable, Identifiable {
let name: String
let timestamp: Int?
let contact_info: String?
let id = UUID()
enum CodingKeys: String, CodingKey {
case name, timestamp, contact_info
}
}
数据使用
import SwiftUI
struct FriendsView: View {
@StateObject private var friendsManager = FriendsManager()
var body: some View {
NavigationView {
List {
ForEach(friendsManager.friendsList) { friends in
Text(friends.name)
}
}
.navigationTitle("Friends")
}
}
}
1条答案
按热度按时间92dk7w1h1#
答案很复杂,因为这取决于您计划如何使用
Friends
和FriendsList
对象。struct
是不可变的,class
是可变的。阅读更多关于here的差异。我会说,如果你不打算在应用程序中稍后修改
FriendsList
-使用struct
。如果您计划稍后在应用程序中修改它,则有几个选项:struct
并使用相同的数据创建另一个对象,稍后将修改这些对象。class
并稍后修改它。这两种情况都带来了额外的复杂性--你必须将更改存储在某个地方,这就导致了在哪里以及如何存储的问题(数据库、后端等)。
同样在你的地方,我会将
FriendsList
结构重命名为Friend
,因为它表示单个对象(朋友)而不是列表。否则,这是一个有点令人困惑的名字。