首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举函数中的错误

枚举函数中的错误
EN

Stack Overflow用户
提问于 2016-09-15 05:37:21
回答 2查看 48关注 0票数 1

我有一个枚举是这样设置的:

代码语言:javascript
复制
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'。我不知道它为什么要找这个。

这个错误是什么意思,我如何恢复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-15 06:06:01

几件事1.添加未定义的作为其中一种情况2.也可以像Calculators.getCalculator一样将getCalculator声明为静态方法来访问它

为了防止程序在索引超出范围时崩溃,我添加了检查,它将返回UNDEFINED。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2016-09-15 05:44:04

您的if let不会计算可选的值(这是必需的)。如果数组下标超出范围,则会崩溃。我想你的意思是:

代码语言:javascript
复制
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]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39500014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档