Swift中如何获取计算属性数组的前5个元素?
解决Swift中计算属性数组使用prefix无法返回[Double]的问题
问题根源
你遇到的编译错误核心原因是:prefix(_:)和prefix(upTo:)方法返回的是**ArraySlice[Double]数组类型。另外,类中直接用存储属性初始值访问计算属性的写法不合法,必须改为计算属性。
修正后的代码
class EarningsViewModel: ObservableObject { var catWageArray: [Double] { [81,156,162,166,169,173,177,181,185,192,277,280,282,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285] } // 保留Slice类型的计算属性 var sliceCareerTest: ArraySlice<Double> { catWageArray.prefix(5) } var sliceCareerTest2: ArraySlice<Double> { catWageArray.prefix(upTo: 5) } // 转为[Double]数组的正确写法 var sliceCareer: [Double] { Array(catWageArray.prefix(5)) } var sliceCareer2: [Double] { Array(catWageArray.prefix(upTo: 5)) } var n = 5 var firstFiveSlice: ArraySlice<Double> { catWageArray[0..<n] } var firstFiveArray: [Double] { Array(firstFiveSlice) } }
关键说明
- Slice转数组:ArraySlice是原数组的子序列视图,并非独立数组。要得到
[Double]类型的结果,必须通过Array(_:)初始化器将Slice转换为真正的数组。 - 计算属性的访问规则:类的存储属性不能在初始化阶段直接访问另一个计算属性(因为计算属性的求值是延迟触发的),所以所有依赖
catWageArray的属性都要改为计算属性。
内容的提问来源于stack exchange,提问作者weekendwarrior
相关产品推荐
相关产品推荐

