Swift:数组随机元素加入新数组并在List展示及错误修正
问题修复方案
错误原因分析
- 类型不匹配:
newList是[NewWords]类型数组,但你直接往里面添加String类型的单词,append方法找不到匹配的重载,因此报错。 - 状态未被监听:
newList是普通变量,SwiftUI无法感知它的变化,就算添加成功也不会更新List视图。
修复后的完整代码
struct NewWords: Identifiable { var id: UUID = UUID() var word: String } struct ContentView: View { let words: [String] = ["one", "two", "three", "four", "five"] // 使用@State包装数组,让SwiftUI监听变化 @State private var newList: [NewWords] = [] var body: some View { VStack { Spacer() Button("Click me") { makeNewList() } Spacer() List(newList) { item in Text(item.word) } Spacer() } } func makeNewList() { let randomNumber = Int.random(in: 0..<words.count) let randomWord = words[randomNumber] print(randomWord) // 创建NewWords实例再添加到数组 newList.append(NewWords(word: randomWord)) } }
关键修改点
- 将
newList改为@State private var,让SwiftUI能监听数组变化并自动刷新视图。 - 调用
append时,用随机字符串初始化NewWords实例,解决类型不匹配问题。
内容的提问来源于stack exchange,提问作者sagar arora
相关产品推荐
相关产品推荐

