【问题标题】:Getting error on ForEach when trying to show array尝试显示数组时出现 ForEach 错误
【发布时间】:2021-12-07 09:20:45
【问题描述】:

我有一个从数组中获取随机单词并将其转换为字母数组的方法,我正在尝试使用 ForEach 显示每个字母,但出现此错误。

无法将“[Any]”类型的值转换为预期的参数类型“Binding

var gameLetters = ContentView.getLetters()

...

ForEach(gameLetters) { letter in   //error here
        Text(letter)
}

这是方法

static func getLetters() -> Array<Any> {
    let allWords = WordList.wordList
    let randomWord : String! = allWords.randomElement()
    let letters = Array(randomWord)
    return letters
}

如果有什么需要详细说明的,请告诉我。

【问题讨论】:

  • 你能不能先打印你的 gameLetters 看看有没有 nil
  • 你可以试试这个来打印 gameLetters gameLetters.forEach { print($0) }

标签: swift swiftui swiftui-foreach


【解决方案1】:

编译器不满意,因为Any 不符合协议HashableIdentifiable

将 getLetters 声明更改为

static func getLetters() -> Array<Character> {
    let allWords = WordList.wordList
    let randomWord : String! = allWords.randomElement()
    let letters = Array(randomWord)
    return letters
}

会让编译器明白getLetters()的返回是Characters的数组(Characters符合Hashable

您还需要将ForEach 更改为

ForEach(gameLetters, id: \.self) { letter in
    Text(String(letter))
}

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 2012-11-20
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多