You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
    }
}

关键说明

  1. Slice转数组:ArraySlice是原数组的子序列视图,并非独立数组。要得到[Double]类型的结果,必须通过Array(_:)初始化器将Slice转换为真正的数组。
  2. 计算属性的访问规则:类的存储属性不能在初始化阶段直接访问另一个计算属性(因为计算属性的求值是延迟触发的),所以所有依赖catWageArray的属性都要改为计算属性。

内容的提问来源于stack exchange,提问作者weekendwarrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:10:11