2015-11-19 31 views
9

Czy ktoś może mi w tym pomóc.Przełącznik obudowy enum nie występuje w typie

Mam następujący public enum

public enum OfferViewRow { 
    case Candidates 
    case Expiration 
    case Description 
    case Timing 
    case Money 
    case Payment 

} 

A po mutableProperty:

private let rows = MutableProperty<[OfferViewRow]>([OfferViewRow]()) 

W moim pliku inicjującego używam trochę reactiveCocoa ustawić mój MutableProperty:

rows <~ application.producer 
    .map { response in 
     if response?.application.status == .Applied { 
      return [.Candidates, .Description, .Timing, .Money, .Payment] 
     } else { 
      return [.Candidates, .Expiration, .Description, .Timing, .Money, .Payment] 
     } 
} 

Ale teraz problem, kiedy próbuję uzyskać wartość mojego wyliczenia wewnątrz moich wierszy t wyrzuca błędy. Proszę spojrzeć na kod poniżej.

func cellViewModelForRowAtIndexPath(indexPath: NSIndexPath) -> ViewModel { 
     guard 
      let row = rows.value[indexPath.row], 
      let response = self.application.value 
      else { 
       fatalError("") 
     } 

     switch row { 
     case .Candidates: 
      // Do something 
     case .Expiration: 
      // Do something 
     case .Description: 
      // Do something 
     case .Timing: 
      // Do something 
     case .Money: 
      // Do something 
     case .Payment: 
      // Do something 
     } 
    } 

zgłasza błąd: Enum case 'some' not found in type 'OfferViewRow na linii let row = rows.value[indexPath.row]

A na każdy switch rzuca: Enum case 'Candidates' not found in type '<<Error type>>

Czy ktoś może mi pomóc z tym?

+0

czy możesz spróbować 'public enum OfferViewRow: Int' jako deklaracja enum –

+0

Nie pomóż, również wypróbowałeś! – Steaphann

+0

Jaki jest typ stałego 'wiersza'? –

Odpowiedz

14

Oświadczenie strażnika chce opcjonalnie, jak wskazano w komunikacie o błędzie "Enum case" some "".

Ale rows.value[indexPath.row] nie jest Optional<OfferViewRow>, jest to surowy OfferViewRow. Więc nie wejdzie w oświadczenie straży.

Przenieś let row = rows.value[indexPath.row] jedną linię w górę: Swift zajmie się sprawdzaniem granic i ulegnie awarii, jeśli indexPath.row jest poza zasięgiem.