Swift中如何过滤SolarElevationArray数组以显示指定天数的元素?
过滤SolarElevationArray数组的正确语法
你需要过滤存储特定地点全年每小时太阳高度数据的数组,仅保留day等于123的元素,相关定义如下:
结构体定义
struct SolarElevationArray: Identifiable { var id = UUID().uuidString var day: Int var hour: Int var date: Date var elevation: Double var animate: Bool = false }
数组声明
@State var solarElevation: [SolarElevationArray] = solarElevationDates static var solarElevationDates : [SolarElevationArray] = []
原展示所有数据的正确写法
ForEach(solarElevation) {item in LineMark( x: y: series: ) }
你当前尝试的写法存在错误:
ForEach(solarElevation.filter { solarElevation.day.contains(Int: 123)}) {item in
正确过滤写法
你需要在filter闭包中访问数组单个元素的day属性,直接判断是否等于123即可,有两种写法可选:
简洁写法(使用$0指代闭包参数)
ForEach(solarElevation.filter { $0.day == 123 }) { item in LineMark( x: y: series: ) }
可读性更强的写法(显式命名闭包参数)
ForEach(solarElevation.filter { element in element.day == 123 }) { item in LineMark( x: y: series: ) }
错误原因说明
- 原写法中
solarElevation.day是错误的:solarElevation是数组本身,没有day属性,闭包参数对应数组的单个元素,需通过闭包参数($0或命名参数)访问元素的day属性。 contains(Int: 123)用法错误:此处不需要用contains方法,直接判断元素的day值是否等于目标数值即可。
内容的提问来源于stack exchange,提问作者Edward Hasted
相关产品推荐
相关产品推荐

