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

Objective-C转Swift报错:二元运算符'..<'无法应用于Int和Int?类型

解决Swift中Binary operator '..<' cannot be applied to operands of type 'Int' and 'Int?'错误

这个报错的核心原因很清晰:你的gymdays是可选类型(从gymdays?.count的可选链式调用能看出来),所以gymdays?.count返回的是Int?(可选整数),而Swift的范围运算符..<要求左右两边都是非可选的Int类型,类型不匹配就抛出了这个错误。

下面给你几种不同场景下的解决方案:

1. 最安全的可选绑定(推荐)

如果GymHours.orderedDays()有可能返回nil,优先用可选绑定先确认非nil再执行循环,避免潜在崩溃:

if let gymdays = GymHours.orderedDays() {
    for i in 0..<gymdays.count {
        // 在这里编写你的循环逻辑
    }
}

2. 强制解包(仅当确定返回值非nil时使用)

如果你能100%保证orderedDays()永远不会返回nil,可以强制解包可选值,直接获取非可选的count:

let gymdays = GymHours.orderedDays()!
for i in 0..<gymdays.count {
    // 你的代码逻辑
}

⚠️ 注意:如果后续orderedDays()返回nil,强制解包会导致运行时崩溃,所以谨慎使用。

3. 提供默认值处理nil情况

如果希望在gymdays为nil时直接跳过循环,可以用空合运算符??给可选count设置默认值0:

let gymdays = GymHours.orderedDays()
for i in 0..<(gymdays?.count ?? 0) {
    // 当gymdays为nil时,0..<0是空范围,循环不会执行
}

更Swift化的遍历方式(进阶推荐)

其实在Swift里,我们很少需要手动用索引循环,如果你的逻辑不需要用到索引值,直接遍历数组元素会更简洁:

if let gymdays = GymHours.orderedDays() {
    for day in gymdays {
        // 直接使用day对象,无需索引
    }
}

如果需要同时获取索引和元素,可以用enumerated()方法:

if let gymdays = GymHours.orderedDays() {
    for (index, day) in gymdays.enumerated() {
        // 同时使用index(索引)和day(元素)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:58:04