2016-07-25 12 views
-2

Ein Block wie unten definiertwarum ich Wert auszupacken, bevor ich verwenden ist

// 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 
    } 

An einigen Stellen, ich bin mit

let allSchedules = sortSchedule?(result, sortDescription()) 
for schedule in allSchedules // Xcode complains at here 
{ 
    .......... 
} 

Im indem ? einen Block aufgerufen wird, weil ich möchte Stellen Sie sicher, dass, wenn der Block existiert, dann etwas tun. Allerdings Xcode beklagt für die for Schleife

value of optional type [Schedule]? not upwrapped, did you mean to use '!' or '?'? 

Ich bin nicht sicher, warum, weil der Rückgabetyp eines Blocks ein Array ist, die 0 oder mehr als einen Artikel haben kann.

Weiß jemand, warum xcode sich beschweren.

+0

warum bekomme ich ein downvow Leute? Ich würde gerne den Grund dafür wissen, damit ich vermeiden kann, in Zukunft so etwas zu fragen. – tonytran

Antwort

1

Sie verwenden ? in Zeile let allSchedules = sortSchedule?(result, sortDescription()) nicht "sicher, dass, wenn der Block existiert", aber nur zur Kenntnisnahme, dass Sie verstehen, dass es nil sein kann. Hinter Szene allSchedules haben Sie den Typ Array<Schedule>?. Und Sie können for in Zyklus für nil nicht verwenden. Sie verwenden besser optionale Bindung:

if let allSchedules = sortSchedule?(result, sortDescription()) 
{ 
    for schedule in allSchedules 
    { 
     //.......... 
    } 
}