块定义如下
// Declare block ( optional )
typealias sorting = (([Schedule], [String]) -> [Schedule])?
var sortSchedule: sorting = { (schedules, sortDescription) in
var array = [Schedule]()
for string in sortDescription
{
for (index, schedule) in schedules.enumerate()
{
if string == schedule.startTime
{
array.append(schedule)
break
}
}
}
return array
}
在某些时候,我正在通过
调用一个块 let allSchedules = sortSchedule?(result, sortDescription())
for schedule in allSchedules // Xcode complains at here
{
..........
}
我正在使用?
,因为我想确保如果该块存在,那么就做一些事情。但是,Xcode抱怨for
循环
value of optional type [Schedule]? not upwrapped, did you mean to use '!' or '?'?
我不确定为什么因为块的返回类型是一个可以有0个或多个项目的数组。
有谁知道为什么xcode会抱怨。
答案 0 :(得分:1)
您在行?
中使用let allSchedules = sortSchedule?(result, sortDescription())
而不是“确定如果该块存在”,但只是为了注意,您了解它可以是nil
。场景allSchedules
后面的类型为Array<Schedule>?
。并且您不能将for in
周期用于nil
。您最好使用可选绑定:
if let allSchedules = sortSchedule?(result, sortDescription())
{
for schedule in allSchedules
{
//..........
}
}