【问题标题】:Switch case on enum type在枚举类型上切换大小写
【发布时间】:2016-02-27 21:47:16
【问题描述】:

我有一个问题,我希望对枚举类型 (SearchFilterOptionType) 进行 switch-case,但由于某种原因 Swift/Xcode 编译器无法识别该成员。

我有以下枚举:

enum SearchFilterOptionType {
    case Checkbox
    case Selection
    case Interval
    case Text
}

我可以做到以下几点:

if dataElements[0].type == SearchFilterOptionType.Checkbox {
    return
}

但如果我想用 switch-case 复制相同的内容,我会收到错误:

"Enum case 'Checkbox' 不是类型的成员 'SearchFilterOptionType!'"

switch dataElements[0].type {
    case SearchFilterOptionType.Checkbox:
        break
            
    default:
        break
}

添加

var dataElements: Array<SearchFilterOption>

struct SearchFilterOption {

    var title: String!
    var type: SearchFilterOptionType!
    
    init(title: String, type: SearchFilterOptionType) {
        self.title = title
        self.type = type
    }
}

【问题讨论】:

  • 显示什么是dataElements,首先如果你比较dataElements[0],在第二种情况下你比较dataElements[0].type - 这些是不同的值
  • 对不起,我确实比较了 if 语句中的 dataElements[0].type。我已经更新了代码示例
  • 显示什么是dataElements
  • 看起来你像这样创建你的typevar type: SearchFilterOptionType!,在这种情况下它是可选类型,你需要使用 switch 解包switch dataElements[0].type! 在这种情况下,错误不会但是这是错误的,您需要检查该对象是否不是nil
  • 在使用带有非可选参数的 init 方法时,将属性声明为隐式未包装的选项是完全没用的。删除结构中的所有感叹号,而不是摆脱所有这些东西来处理选项。

标签: ios swift enums switch-statement


【解决方案1】:

这是因为您将type 声明为可选。删除!(感叹号)会有所帮助。

【讨论】:

    【解决方案2】:

    试试这个

        switch dataElements[0].type! {
        case SearchFilterOptionType.Checkbox:
            break
    
        default:
            break
        }
    

    注意错误消息和 switch 语句中的 !

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 2011-11-07
      • 2016-02-22
      • 2023-02-08
      • 2019-08-05
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多