gpt4 book ai didi

swift - 在 SwiftUI 中设置添加项目的限制?

转载 作者:行者123 更新时间:2023-12-02 01:31:38 30 4
gpt4 key购买 nike

您好,我刚刚开始学习 Swift,我一直想知道如何对可以添加到列表中的项目数量添加限制,例如最多 3 个。

我希望有人能帮助我。

我遵循了本教程系列https://youtu.be/SMt4_WUdKag?list=PLwvDm4VfkdpheGqemblOIA7v3oq0MS30i

这是 ItemStore 文件:

class ItemStore: ObservableObject {

static var shared = ItemStore()
static var preview = ItemStore()

@Published var items: [ItemModel] = []{

didSet {

saveItems()

}

}

let itemsKey: String = "items_list"

init() {

getItems()

}

func getItems() {
guard
let data = UserDefaults.standard.data(forKey: itemsKey),
let savedItems = try? JSONDecoder().decode([ItemModel].self, from: data)
else {return}

self.items = savedItems

}

func deleteItem (indexSet: IndexSet){
items.remove(atOffsets: indexSet)
}

func moveItem (from: IndexSet, to: Int) {
items.move(fromOffsets: from, toOffset: to)

}

func addItem (title: String) {

let newItem = ItemModel(title: title, isCompleted: false)
items.append(newItem)

}

func updateItem( item: ItemModel) {

if let index = items.firstIndex(where: { $0.id == item.id}) {
items [index] = item.updateCompletion()

}

}

func saveItems() {
if let encodedData = try? JSONEncoder().encode(items) {
UserDefaults.standard.set(encodedData, forKey: itemsKey)

}
}
}

这是AddView代码:

struct AddView: View {
@Environment(\.presentationMode) var presentationMode
@EnvironmentObject var store: ItemStore
@State var textFieldText: String = ""


@State var alerTitle: String = ""
@State var showAlert: Bool = false


var body: some View {
ScrollView {
VStack {
TextField("Type Here", text: $textFieldText)

.padding(.horizontal)
.frame(height: 55)
.background(Color(UIColor.secondarySystemBackground))
.cornerRadius(10)
.font(.body.weight(.medium))

Button(action: saveButtonPressed, label: {
Text("Save".uppercased())
.foregroundColor(.white)
.font(.headline)
.fontWeight(.bold)
.frame(height: 66.0)
.frame(maxWidth: .infinity)
.background(Color("AccentColor"))
.cornerRadius(10)

})
}
.padding(14)
}
.navigationTitle("Add an Item ✍️ ")
.alert(isPresented: $showAlert, content: getAlert)

}

func saveButtonPressed() {
if textIsAppropriate() {


listViewModel.addItem(title: textFieldText)
presentationMode.wrappedValue.dismiss()

}
}

func textIsAppropriate() -> Bool {
if textFieldText.count < 1 {
alerTitle = "You can't leave the task empty! 🌚"
showAlert.toggle()
return false
}
return true
}
func getAlert() -> Alert {
return Alert(title: Text(alerTitle))
}
}




struct AddView_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
AddView()
}
.environmentObject(ItemStore.preview)
}
}

最佳答案

我查看了您正在遵循的教程。设置限制的最简单方法是将 .disabled(items.count > 3) 添加到用于导航到添加屏幕的 NavigationLink 的末尾。像这样的事情:

NavigationLink(destination: AddView()) {
Text("Add")
}
.disabled(items.count > 3)

关于swift - 在 SwiftUI 中设置添加项目的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73180090/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com