为什么我必须在使用前解开价值
why I have to unwrap value before I use
块定义如下
// 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 '?'?
我不确定为什么,因为块的 return 类型是一个数组,可以有 0 个或多个项目。
有谁知道 xcode 为什么抱怨。
您在行 let allSchedules = sortSchedule?(result, sortDescription())
中使用 ?
而不是 "for sure that if the block exists",但请注意,您明白它可以是 nil
。在幕后 allSchedules
有类型 Array<Schedule>?
。而且你不能使用 for in
循环 nil
。您最好使用可选绑定:
if let allSchedules = sortSchedule?(result, sortDescription())
{
for schedule in allSchedules
{
//..........
}
}
块定义如下
// 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 '?'?
我不确定为什么,因为块的 return 类型是一个数组,可以有 0 个或多个项目。
有谁知道 xcode 为什么抱怨。
您在行 let allSchedules = sortSchedule?(result, sortDescription())
中使用 ?
而不是 "for sure that if the block exists",但请注意,您明白它可以是 nil
。在幕后 allSchedules
有类型 Array<Schedule>?
。而且你不能使用 for in
循环 nil
。您最好使用可选绑定:
if let allSchedules = sortSchedule?(result, sortDescription())
{
for schedule in allSchedules
{
//..........
}
}