所以我有以下枚举
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'类型中找不到“枚举案'签证'”
答案 0 :(得分:1)
类型不匹配String
与Franchise
。
虽然原始值为String
,但枚举类型为Franchise
。
有(至少)3个解决方案:
检查原始值(if
条件周围没有括号)
if paymentCard.franchise! == Franchise.visa.rawValue {
从原始值
创建Franchise
实例
if Franchise(rawValue: paymentCard.franchise!)! == .visa {
将franchise
声明为Franchise
并分别更改相关代码
var franchise : Franchise?
也没有围绕案例的括号! - 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}}匹配。