[英]Altering property in a SwiftUI ForEach loop
我一直在嘗試更改 SwiftUI 中 object 的偏移值,但無法完全正常工作。 我覺得這里缺少一些基本的東西。
下面是主要的 SwiftUI 代碼。 我正在嘗試在用戶滑動時更改堆棧中每張卡的偏移值。 但是,根據“user.offset = value.translation.width”,我收到錯誤“無法分配給屬性:‘user’是‘let’常量”。 我想我明白那是因為您實際上無法更改您正在使用 ForEach 循環迭代的 object。 但是,我正在努力尋找解決方法。
import SwiftUI
import Kingfisher
struct GroupSessionView: View {
@ObservedObject var userViewModel = ExploreUsersViewModel()
var body: some View {
VStack(spacing: 10) {
ZStack {
ForEach(Array(zip(userViewModel.userCards.indices, userViewModel.userCards)), id: \.0) { index, user in
HStack {
KFImage(URL(string: user.image))
}
.zIndex(Double(userViewModel.users.count - index))
.offset(x: 0)
.gesture(DragGesture().onChanged({ value in
withAnimation {
user.offset = value.translation.width
}
}).onEnded({ (value) in
withAnimation {
user.offset = 0
}
}))
}
}
Spacer()
}
}
}
這是我正在使用的視圖 model 來生成 userCards 數據。
class ExploreUsersViewModel: ObservableObject {
@Published var users = [User]()
@Published var userCards = [UserCard]()
let service = UserService()
init() {
fetchUsers()
getCards()
}
func fetchUsers() {
service.fetchUsers { users in
self.users = users
print("Users are \(users)")
}
}
func getCards() {
service.fetchUsers { users in
for user in users {
self.userCards.append(UserCard(id: NSUUID().uuidString, image: user.profileImageUrl, fullName: user.fullname, offset: 0))
}
}
}
}
在ForEach
(以及forEach
)中,所有索引變量都是常量。
但是因為您有索引,所以解決方案非常簡單:直接修改數組中的項目
userViewModel.userCards[index].offset = value.translation.width
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.