Enum case switch not found in type

邮差的信 提交于 2020-01-02 01:21:06

问题


Can someone please help me with this.

I have the following public enum

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

}

And the following mutableProperty:

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

In my init file I use some reactiveCocoa to set my 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]
        }
}

But now the problem, when I try to get the value of my enum inside my rows it throws errors. Please look at the code below.

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

It throws an error: Enum case 'some' not found in type 'OfferViewRow on the line let row = rows.value[indexPath.row]

And on every switch statements it throws: Enum case 'Candidates' not found in type '<<Error type>>

Can someone help me with this?


回答1:


The guard statement wants an optional, as hinted by "Enum case 'some'" in the error message.

But rows.value[indexPath.row] is not Optional<OfferViewRow>, it is a raw OfferViewRow. So it won't enter a guard statement.

Move let row = rows.value[indexPath.row] one line up: Swift takes care of bounds checking, and will crash if indexPath.row is out of bounds.



来源:https://stackoverflow.com/questions/33815171/enum-case-switch-not-found-in-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!