2015-01-30 9 views
5

Wyliczenia w Swift wyglądają naprawdę potężnie, ale ... Muszę pomijać coś o tym, w jaki sposób to robię. Chcę zdefiniować pewne akcje dla zdalnego odtwarzacza multimedialnego. Wydaje się, że jest to dobry przykład do wyliczania. Zdefiniowałem dozwolone typy wiadomości w Enum i chciałbym go użyć, aby uzyskać zmodyfikowany słownik parametrów. Parametry zostaną ostatecznie przesłane graczowi jako JSON. W tej chwili pojawia się błąd Braced block of statements is an unused closure. Oto odpowiedni kod:Swift enum error: zablokowany blok instrukcji jest niewykorzystanym zamknięciem

public enum PlayerCommand { 
case Play 
case Pause 
case Load(String) 

func params(cmd_id:NSInteger) -> [String : Any] { 
    var dict = [ 
     CMD_ID  : cmd_id, 
     TYPE  : "LOAD", 
     AUTOPLAY : false, 
     MEDIA  : NSNull() 
    ] 
    switch self { 
    case .Load(let media): { 
      dict.updateValue(media, forKey: MEDIA) 
     } 
    case .Play: { 
      dict.updateValue("PLAY", forKey: TYPE) 
      dict[CURRENT_TIME] = NSNull() 
     } 
    case .Pause: { 
      dict.updateValue("PAUSE", forKey: TYPE) 
     } 
    default: 
    } 
    return dict 
} 
} 

Jestem pewien, że istnieje również bardziej funkcjonalny (? Swiftian) sposób wyrazić to, jak dobrze, ale nie jestem posiadające dużo szczęścia ze składnią jeszcze. mapa?

Odpowiedz

6

Masz pewną składnię switch, wszystko. Nie potrzebujesz { } wokół wyrażeń każdego z nich case (Swift interpretuje je jako próby utworzenia wyrażenia zamknięcia, stąd błąd).

Po prostu wykonaj case .Play: dict.updateValue(etc.).

Pamiętaj, że musisz mieć instrukcję w klauzuli domyślnej - ale tak naprawdę nie potrzebujesz w tym przypadku wartości domyślnej, ponieważ twój przełącznik wyczerpuje wszystkie możliwości.

Powiązane problemy