使用枚举时,表达式的类型不含更多上下文

时间:2017-05-31 16:43:58

标签: swift enums

所以我有以下枚举

enum Franchise: String {
    case visa = "vi"
    case mastercard = "mc"
    case americanexpress = "ax"
    case diners = "di"
}

然后使用具有声明如下的特许经营属性的对象

var franchise : String?

在我的代码中的某处,我用

验证了以下内容
 if(paymentCard.franchise! == .visa) {
            self.franchiseLogo.image = UIImage(named: "american_express_icon")
        }

我得到的“表达类型不明确没有更多上下文”错误。

我也尝试过使用switch case语句。

switch self.paymentCard.franchise  {
            case (.visa):
                // Something
            case (.mastercard):
                // Something
            case (.americanexpress):
                // Something
            case (.diners):
                // Something
        }

但是在每种情况下我都会收到一条错误,说'在'String'类型中找不到“枚举案'签证'”

2 个答案:

答案 0 :(得分:1)

类型不匹配StringFranchise

虽然原始值为String,但枚举类型为Franchise

有(至少)3个解决方案:

  1. 检查原始值(if条件周围没有括号)

    if paymentCard.franchise! == Franchise.visa.rawValue  {
    
  2. 从原始值

    创建Franchise实例
    if Franchise(rawValue: paymentCard.franchise!)! == .visa  {
    
  3. franchise声明为Franchise并分别更改相关代码

    var franchise : Franchise?
    
  4. 也没有围绕案例的括号! - case .visa:

答案 1 :(得分:1)

您已将franchise声明为optional String,并且您尝试将其与Enum类型Franchise匹配,这会导致错误匹配

您可以从以下位置更改变量的类型:

var franchise : String? 

要:

var franchise : Franchise

并使用您当前的代码。如果您仍想在String?特许经营权上使用variable,则需要将代码更新为以下内容:

if franchise == Franchise.visa.rawValue {

}

switch franchise!  {
case (Franchise.visa.rawValue):
    // Something
case (Franchise.mastercard.rawValue):
    // Something
case (Franchise.americanexpress.rawValue):
    // Something
case (Franchise.diners.rawValue):
    // Something
default:
    break
}

所以改变的是你的字符串变量与rawValue的{​​{1}}匹配。