二元运算符' ..'不能应用于' Int'类型的操作数和' Int?'

时间:2018-05-07 19:17:13

标签: swift swift4

将Objective-C转换为Swift后出现错误。感谢

var gymdays = GymHours.orderedDays()
for i in 0..<gymdays?.count {

}

error screen

我的Objective-C代码:

NSArray *days = [GymHours orderedDays];
for (uint i = 0; i < days.count; i++) {

}

3 个答案:

答案 0 :(得分:4)

诠释?是可选的,因此XCode告诉您您正在尝试使用可能存在或不存在的值。

如果值为nil,您可以使用以下内容来避免崩溃:

for i in 0..<(gymdays?.count ?? 0) {

}

答案 1 :(得分:3)

你可以安全地使用if let来避免崩溃,如果它是零的话可能会导致强行打开

if let gymdays = GymHours.orderedDays()  {
{
     for i in 0..<gymdays.count { }
}

答案 2 :(得分:3)

通过在Swift中编写最接近的东西,停止尝试转换Objective C代码。它(通常)不起作用,即使它确实如此,它也会产生垃圾Swift代码。相反,学习ObjC和Swift,你可以理解Objective C代码中表达的内容,这样你就可以编写最好的Swift代码来表达它。

此代码是代码循环遍历NSArray的索引。在Swift中,您不应该使用count。你可以循环遍历数组的...... indices ...:

for index in gymDays.indices { ...

在Objective C代码的下一行中,您会看到类似let gymDay = [gymDays objectAtIndex: i]的内容,这是非常高的可能性。在这种情况下,在Swift中,您可以直接迭代数组的元素:

for gymDay in gymDays { ...

如果您需要索引和元素,那么您只需使用enumerated()

for (index, gymDay) in gymDays.enumerated() { ...