作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有人可以帮我解决这个问题吗?
我有以下 public enum
public enum OfferViewRow {
case Candidates
case Expiration
case Description
case Timing
case Money
case Payment
}
以及以下可变属性:
private let rows = MutableProperty<[OfferViewRow]>([OfferViewRow]())
在我的初始化文件中,我使用了一些 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>>
有人可以帮我解决这个问题吗?
最佳答案
guard 语句需要一个可选的,如错误消息中的“Enum case 'some'”所暗示的那样。
但是rows.value[indexPath.row]
不是 Optional<OfferViewRow>
, 它是原始的 OfferViewRow
.所以它不会进入保护语句。
移动let row = rows.value[indexPath.row]
一条线:Swift 负责边界检查,如果 indexPath.row 超出范围就会崩溃。
关于ios - 在类型中找不到枚举大小写开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815171/
我是一名优秀的程序员,十分优秀!