在类型中找不到枚举案例开关

时间:2015-11-19 22:02:49

标签: ios swift enums swift2 reactive-cocoa

有人可以帮我解决这个问题。

我有以下public enum

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

}

以下mutableProperty:

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

在我的init文件中,我使用一些reactiveCocoa来设置我的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]
        }
}

但是现在问题是,当我尝试在我的行中获取枚举的值时,它会抛出错误。请看下面的代码。

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

Enum case 'some' not found in type 'OfferViewRow

上抛出错误:let row = rows.value[indexPath.row]

在每个switch语句中抛出:Enum case 'Candidates' not found in type '<<Error type>>

有人可以帮我吗?

1 个答案:

答案 0 :(得分:14)

警卫声明需要一个可选项,如错误消息中的“Enum case”some暗示所示。

rows.value[indexPath.row]不是Optional<OfferViewRow>,而是OfferViewRow。所以它不会进入警卫声明。

向上移动let row = rows.value[indexPath.row]一行:Swift负责边界检查,如果indexPath.row超出界限则会崩溃。