arrays - 如何检查字符串数组中的重复元素
问题描述
我目前正在使用SwiftUI
.
如果我运行下面的代码,显示结果将是A
,但我想让它成为显示结果B
。
这可以实现什么样的代码?
这是代码:
struct TestView:View {
let fruits = ["apple","apple","apple","orange","orange","banana"]
@State var tmpFruits = [""]
var body: some View{
List(fruits, id: \.self){fruit in
if tmpFruits.contains(fruit) == false{
Button(action: {
}, label: {
Text(fruit)
})
.onAppear(){
tmpFruits.append(fruit)
}
}
}
}
}
斯威夫特 5.0
SwiftUI 2.0
解决方案
您需要List
具有唯一且恒定的 ID。目前,ID 是fruits
. 问题是因为有重复的项目,你违反了唯一 ID 规则。
解决此问题的一种方法是fruits
首先过滤,因此使用唯一 ID。它还极大地简化了视图代码。
这使用来自apple/swift-algorithms的Unique用于. 记得要。.uniqued()
import Algorithms
代码:
import Algorithms
struct TestView: View {
private let fruits = ["apple", "apple", "apple", "orange", "orange", "banana"]
var body: some View {
List(Array(fruits.uniqued()), id: \.self) { fruit in
Button(fruit) {
print("action")
}
}
}
}
推荐阅读
- c++ - 如何解决 Qt 串口错误“在编译控制器 pc 时不是 &qserialport 的成员”?
- kubernetes - 如何在没有图像的情况下创建部署,然后添加新图像?
- node.js - 用于 Google 表单提交的 NodeJS 监视器
- r - 错误:dyn.load(file, DLLpath = DLLpath, ...) 中“roxygen2”的包或命名空间加载失败:
- javascript - Shopify / Liquid - 将过滤器搜索从选择下拉菜单更改为按钮
- pandas - 使用 dask 合并大型数据集
- shiny - 闪亮的应用程序在 iPhone 上 20 秒后断开连接,但在 OnePlus 上没有
- javascript - JS 中的作用域:这些变量不应该是全局的,而是在没有“var”或“let”的情况下声明。为什么?
- ios - 未调用 UI 更新委托方法
- progressive-web-apps - 渐进式网络应用