我有一个枚举是这样设置的:
enum Calculators {
case RECTANGLE
case CIRCLE
case TRIANGLE
case TRAPEZOID
case CUBE
case CONE
case SPHERE
case CYLINDER
case ASPHALT
case TACK_SEAL_COAT
case ASPHALT_YIELD
case SIDEWALK
case CONCRETE_DECK_SEALER
case CHIP_SEAL
case AGGREGATE_STOCK_PILE
case BACKFILL
case SALT_STOCK_PILE
case SALT_SPREADER_CALIBRATION
case ROAD_SALT_APPLICATION
static let groups = [[RECTANGLE, CIRCLE, TRIANGLE, TRAPEZOID],
[CUBE, CONE, SPHERE, CYLINDER],
[ASPHALT, TACK_SEAL_COAT, ASPHALT_YIELD, SIDEWALK, CONCRETE_DECK_SEALER, CHIP_SEAL, AGGREGATE_STOCK_PILE, BACKFILL],
[SALT_STOCK_PILE, SALT_SPREADER_CALIBRATION, ROAD_SALT_APPLICATION]]
func getCalculator(category: Int, row: Int) -> Calculators {
if let calculator = Calculators.groups[category][row] {
return calculator
} else {
return Calculators.UNDEFINED
}
}
}我的想法是,我将传入我想要的计算器类别,然后是特定的计算器,它将根据在TableView中选择的行返回正确的枚举。
问题是我面临着一个令人困惑的错误。第一个错误出现在if let calculator行上。错误显示为Enum case 'Some' not found in type 'Calculators'。我不知道它为什么要找这个。
这个错误是什么意思,我如何恢复它?
发布于 2016-09-15 06:06:01
几件事1.添加未定义的作为其中一种情况2.也可以像Calculators.getCalculator一样将getCalculator声明为静态方法来访问它
为了防止程序在索引超出范围时崩溃,我添加了检查,它将返回UNDEFINED。
enum Calculators {
case RECTANGLE
case CIRCLE
case TRIANGLE
case TRAPEZOID
case CUBE
case CONE
case SPHERE
case CYLINDER
case ASPHALT
case TACK_SEAL_COAT
case ASPHALT_YIELD
case SIDEWALK
case CONCRETE_DECK_SEALER
case CHIP_SEAL
case AGGREGATE_STOCK_PILE
case BACKFILL
case SALT_STOCK_PILE
case SALT_SPREADER_CALIBRATION
case ROAD_SALT_APPLICATION
case UNDEFINED
static let groups = [[RECTANGLE, CIRCLE, TRIANGLE, TRAPEZOID],
[CUBE, CONE, SPHERE, CYLINDER],
[ASPHALT, TACK_SEAL_COAT, ASPHALT_YIELD, SIDEWALK, CONCRETE_DECK_SEALER, CHIP_SEAL, AGGREGATE_STOCK_PILE, BACKFILL],
[SALT_STOCK_PILE, SALT_SPREADER_CALIBRATION, ROAD_SALT_APPLICATION]]
func getCalculator(category: Int, row: Int) -> Calculators {
if Calculators.groups.indices.contains(category) {
let calculators = Calculators.groups[category]
if calculators.indices.contains(row) {
return calculators[row]
}
}
return Calculators.UNDEFINED
}
}
let testCalculator = Calculators.RECTANGLE
testCalculator.getCalculator(category: 7, row: 1) // Result: UNDEFINED
testCalculator.getCalculator(category: 1, row: 1) // Result: CONE发布于 2016-09-15 05:44:04
您的if let不会计算可选的值(这是必需的)。如果数组下标超出范围,则会崩溃。我想你的意思是:
func getCalculator(category: Int, row: Int) -> Calculators? {
let groups = Calculators.groups
guard groups.indices.contains(category) else { return nil }
let calculatorCateogry = groups[category]
guard calculatorCateogry.indices.contains(row) else { return nil }
return calculatorCateogry[row]
}https://stackoverflow.com/questions/39500014
复制相似问题