ice*_*omo 1 for-loop ios swift
我正在尝试更新我的一些快速代码,以符合swift 2.2指南.我正在尝试更新我的for循环,这是我目前所拥有的
for(var i = 0; persons?.count > i; i += 1){}
Run Code Online (Sandbox Code Playgroud)
这就是我认为我应该使用的东西
for i in (0..<persons?.count){}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误"二元运算符'.. <'不能应用于'Int'和'Int?'类型的操作数"
我只是不确定我错过了什么.
问题是,persons?.count可能是nil和0..<nil没有任何意义.你可以通过使用nil合并来轻松解决这个问题:
for i in 0..<(persons?.count ?? 0) {
doStuff(i)
}
Run Code Online (Sandbox Code Playgroud)
或者如果您愿意,可以重载..<运算符以接受可选的第二个参数:
func ..<<T:ForwardIndexType where T:Comparable>(lower: T, upper: T?) -> Range<T> {
return lower..<(upper ?? lower)
}
Run Code Online (Sandbox Code Playgroud)
这允许你只写:
for i in 0..<persons?.count {
doStuff(i)
}
Run Code Online (Sandbox Code Playgroud)
正如Sulthan在评论中指出的那样,这可能不是解决您问题的最佳方案.您可能应该处理代码persons中nil较早的情况:
guard let persons = persons else {
// take care of business
}
for person in persons {
doStuff(person)
}
Run Code Online (Sandbox Code Playgroud)