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
相关产品推荐
相关产品推荐

