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

每16个灰色项追加2个红色项,如何计算CollectionView总条目数?

解决CollectionView总条目数计算问题

需求说明

用户选择1-1000之间的整数作为灰色条目数量,CollectionView中每16个灰色条目后需添加红色框,最终列表首尾都要有红色框。例如选择33个灰色条目时,需显示5个红色条目+33个灰色条目,总条目数为38。

当前代码问题

你提供的代码存在两处明显错误:

  1. userChosenValue是Int类型,不存在count属性,这里直接使用userChosenValue即可
  2. 红色条目数的计算逻辑错误,原公式((userChosenValue * 2) + 1) / 18完全不符合需求规则
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    
      let userChosenValue = Int(settingsArray[0].userChosenValue)
      var redItemValue = ((userChosenValue * 2) + 1) / 18
         
      return userChosenValue.count + redItemValue
  
    }

修正方案

逻辑推导

根据需求和示例,红色条目数的计算规则:

  • 把灰色条目按16个一组划分,不足16个的单独算一组
  • 红色条目数 = 2 × 组数 - 1(组数为灰色条目数向上取整除以16的结果)

用整数除法实现的话,可以写成:1 + 2 × ((userChosenValue - 1) / 16),利用整数除法自动向下取整的特性,避免浮点运算。

修正后的代码

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    // 安全转换字符串为整数,同时校验数值范围
    guard let userChosenStr = settingsArray[0].userChosenValue,
          let userChosenValue = Int(userChosenStr),
          userChosenValue >= 1, userChosenValue <= 1000 else {
        return 0 // 不符合要求时返回0,可根据实际需求调整默认值
    }
    
    // 计算红色条目数量
    let redItemCount = 1 + 2 * ((userChosenValue - 1) / 16)
    // 总条目数 = 灰色条目数 + 红色条目数
    return userChosenValue + redItemCount
}

验证示例

  • 当userChosenValue = 33时:(33-1)/16 = 2,redItemCount = 1 + 2×2 = 5,总条目数33+5=38,完全符合需求
  • 当选择16个灰色条目:(16-1)/16=0,redItemCount=1,总条目17
  • 当选择1个灰色条目:redItemCount=1,总条目2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:34:53