将Objective-C转换为Swift后出现错误。感谢
var gymdays = GymHours.orderedDays()
for i in 0..<gymdays?.count {
}
我的Objective-C代码:
NSArray *days = [GymHours orderedDays];
for (uint i = 0; i < days.count; i++) {
}
答案 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() { ...