gpt4 book ai didi

swift - 使用模式匹配来过滤数组

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:41 24 4
gpt4 key购买 nike

这是我的代码:

enum SymptomPeriod {
case Day
case Night
}

enum SymptomType {

case Breathing(SymptomPeriod)
case Breathlessness(SymptomPeriod)
case Opression(SymptomPeriod)
case Cough(SymptomPeriod)

case ActivityLimited()
case SecureTreatment()
}

struct Symptom {
let type: SymptomType
let date: NSDate
}

我有一系列症状。

let symptomList: [Symptom] = ...

我需要用 SymptomPerion 标准过滤症状列表,我尝试这样做:

 let daySymtoms = symptomList.filter { (symptom) -> Bool in
return symptom.type = ???
}

我的问题出在过滤器功能上。

(我的目标是使用过滤函数而不是循环)

最佳答案

一些建议

使用你的结构作为命名空间

与其重复单词 Symptom(例如 SymptomPeriodSymptomType),您应该将枚举放入 Symptom 结构

将 SymptomType 重命名为 Kind

SymptomType 移动到 Symptom 后,您可以删除名称的 Symptom 部分。但是,使用 Type 作为名称会产生冲突,因此您应该将其重命名为 Kind

将 period 计算属性添加到 Kind

这将使过滤更容易

这是代码

struct Symptom {
enum Period {
case Day
case Night
}

enum Kind {
case Breathing(Period)
case Breathlessness(Period)
case Opression(Period)
case Cough(Period)

case ActivityLimited()
case SecureTreatment()

var period: Period? {
switch self {
case Breathing(let period): return period
case Breathlessness(let period): return period
case Opression(let period): return period
case Cough(let period): return period
default: return nil
}
}
}

let kind: Kind
let date: NSDate
}

解决方案

现在过滤变得非常简单

let symptoms: [Symptom] = ...
let filtered = symptoms.filter { $0.kind.period == .Day }

关于swift - 使用模式匹配来过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37932856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com