【问题标题】:ForEach value is only the first item in the ArrayForEach 值只是数组中的第一项
【发布时间】:2020-11-02 21:46:51
【问题描述】:

我一直在尝试使用 SwiftUI 为我的应用程序制作一些 UI,我需要将一个字符串分隔成字符并让每个字符都有自己的组件,到目前为止我有这个:

HStack{
    ForEach(Array("val")) { char in 
        //Stuff here
    }
}

我有一个 Character 的扩展,它给它一个 id,所以它在这种情况下可以工作,但问题是如果我传入“val”,所有组件都有文本“v”而不是“v”“a”“ l" 在单独的组件中,如果我传入一个字符数组,也会发生这种情况,像 ["a", "b"] 会变成 "a" 和 "a"。如果这是一个不好的问题,我很抱歉我对 SwiftUI 和 Swift 很陌生。

【问题讨论】:

  • 不要使Character 的扩展符合Identifiable。相反,请使用ForEach(Array("val"), id: \.self)
  • 确实做到了!
  • @George_E,为什么不让Character 符合Identifiable
  • @NewDev 我编辑了我的答案并添加了推理。

标签: arrays swift swiftui


【解决方案1】:

不要使Character 的扩展符合Identifiable。相反,请执行以下操作:

ForEach(Array("val"), id: \.self)

我不知道您对扩展的实现,因此只需使用 \.selfCharacter 即可。但是,您可以将Character 符合Identifiable,例如:

extension Character: Identifiable {
    
    public var id: Character { self }
}

相当于\.self。从遇到的问题我可以假设实现存在问题,例如给出相同的id,例如:

extension Character: Identifiable {
    
    public var id: Int { 1 }
}

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2019-03-22
    • 2013-03-15
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多