2015-11-19 20 views
9

türünde bulunamadı. Lütfen birisi bana yardımcı olabilir.Enum durum anahtarı

Ben public enum

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

} 

aşağıdaki Ve aşağıdaki mutableProperty: Benim init dosyasında

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

benim MutableProperty ayarlamak için bazı reactiveCocoa kullanın: Şimdi

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

Ama Enumun değerini satırlarımın içine almaya çalıştığımda sorun ben t hataları atar. Lütfen aşağıdaki kodlara bakınız.

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

Bu bir hata atar:

Ve her on let row = rows.value[indexPath.row] ifadeleri geçiş hattı üzerinde Enum case 'some' not found in type 'OfferViewRow o atar: Enum case 'Candidates' not found in type '<<Error type>>

birisi bana bu konuda yardımcı olabilir misiniz?

+0

"public enum" deneyimini deneyebilirsiniz OfferViewRow: Int 'enum bildirgesi olarak –

+0

Yardım etmeyin, ayrıca denemeyin! – Steaphann

+0

"Satır" sabitinin türü nedir? –

cevap

14

Koruma bildirimi, hata iletisinde "Enum case 'some'" ile belirtildiği gibi isteğe bağlı bir seçenek ister.

AncakOptional<OfferViewRow> değil, bu bir ham OfferViewRow. Bu yüzden bir güvenlik beyanı girmeyecek.

Tek satırlık: let row = rows.value[indexPath.row] Bir satır yukarı: Swift, sınırların denetimini üstlenir ve indexPath.row sınırlar dışında kaldığında çökecektir.