类型 'Int' 的表达式模式无法匹配 'uint?' 类型的值(也称为"可选<UInt32>")



我在 Objective-C 到 Swift 代码更改期间出现以下错误。谢谢

class func shareLevelUp(toFacebook level: uint, from vc: UIViewController?) {
let report = GymStatusReport.statusReportForLevel(level)
switch report.level {
case 1:
// something
case 2:
// something
case 3:
// something
case 4:
// something
default:
return
}
}

类型为"Int"的表达式模式无法匹配类型为"uint?"(又名"可选"(

听起来report.level是一个可选值。您需要解开包装,或者需要您的开关具有可选模式。

解开包装后,如下所示:

class func shareLevelUp(toFacebook level: uint, from vc: UIViewController?) {
let report = GymStatusReport.statusReportForLevel(level)
guard let level = report.level else {
return
}
switch level {
case 1:
// something
case 2:
// something
case 3:
// something
case 4:
// something
default:
return
}
}

匹配的可选选项如下所示:

class func shareLevelUp(toFacebook level: uint, from vc: UIViewController?) {
let report = GymStatusReport.statusReportForLevel(level)
switch report.level {
case .some(1):
// something
case .some(2):
// something
case .some(3):
// something
case .some(4):
// something
default:
return
}
}

使用时将toFacebook level: uint转换为 int:

class func shareLevelUp(toFacebook level: uint, from vc: UIViewController?) {
let report = GymStatusReport.statusReportForLevel(level)
switch Int(report.level) {
case 1:
// something
case 2:
// something
case 3:
// something
case 4:
// something
default:
return
}

}

最新更新