swift - Swift:在另一个 switch 语句中重构 switch 语句
问题描述
我有一种计算新分数的方法。下面的方法有效,但问题是代码本身看起来可以显着清理。我只是不知道最好的方法是什么。scoreCount
我根据 filterString 和枚举分配一个整数individualScoreState
func calculateScore(count: Int, filterString: String, individualScoreState: IndividualScores) -> Int {
var scoreCount: Int = 0
var results = Results()
switch filterString {
case "ScoreA":
switch individualScoreState {
case .firstScore:
scoreCount = results.firstScoreACount
case .secondScore:
scoreCount = results.secondScoreACount
default:
scoreCount = results.scoreACount
}
case @"ScoreB":
switch individualScoreState {
case .firstScore:
scoreCount = results.firstScoreBCount
case .secondScore:
scoreCount = results.secondScoreBCount
default:
scoreCount = results.scoreBCount
}
default:
switch individualScoreState {
case .firstScore:
scoreCount = results.firstScoreACount + results.firstScoreBCount
case .secondScore:
scoreCount = results.secondScoreACount + results.secondScoreBCount
default:
scoreCount = results.scoreACount + results.scoreBCount
}
}
return count / scoreCount
}
// 结果结构
struct Results {
var scoreACount = 0
var scoreBCount = 0
var firstScoreACount = 0
var firstScoreBCount = 0
var secondScoreACount = 0
var secondScoreBCount = 0
}
可能有一种更清洁的方法来处理这个问题。也许一种结合两个开关盒的方法?
编辑:忘了提到这results
是一个结构的实例。
解决方案
你可以这样做:
let notB = filterString != "ScoreB" ? 1 : 0
let notA = filterString != "ScoreA" ? 1 : 0
switch individualScoreState {
case .firstScore:
scoreCount = notB * results.firstScoreACount + notA * results.firstScoreBCount
case .secondScore:
scoreCount = notB * results.secondScoreACount + notA * results.secondScoreBCount
default:
scoreCount = notB * results.scoreACount + notA * results.scoreBCount
}
如果@
@"ScoreB" 在 Objective-C 中使用,但在 Swift 中不用于字符串文字,只需将其删除。
推荐阅读
- javascript - ftp 目录下载触发最大调用堆栈超出错误
- javascript - JSX 元素类型“App”不是 JSX 元素的构造函数。“App”类型缺少“ElementClass”类型的以下属性
- reactjs - 将 useEffect 与 Axios API 调用一起使用,无需不断重新渲染(使用 Typescript)
- .net-core - Azure Pipelines 第二个作业找不到第一个作业的结果
- r - 将可选查询参数添加到 R POST 请求中
- python - TypeError: can only concatenate str (not "int") to str, Firebase 数据库问题
- python - 使用 Tensorflow.keras 组织项目。应该是 tf.keras.Model 的一个子类吗?
- assembly - x86架构是否以特殊方式处理零的二进制减法/与零比较?
- python - AssertionError:$152.6、$152.48 的大小与 Python 中抛出的不匹配
- c - 如何测试有符号或无符号整数的最高有效位?