Swift 从枚举数组中删除枚举,而不考虑其参数
我有一个枚举Swift 从枚举数组中删除枚举,而不考虑其参数,swift,enums,Swift,Enums,我有一个枚举BulletinOptions: enum BulletinOption { case notificationPermissions case enableNotifications(eventId: String) case join(hostName: String, eventId: String) case share(type: SocialBulletinItem.BulletinType.Social, event: EventJSON
BulletinOptions
:
enum BulletinOption {
case notificationPermissions
case enableNotifications(eventId: String)
case join(hostName: String, eventId: String)
case share(type: SocialBulletinItem.BulletinType.Social, event: EventJSONModel, view: UIView)
case completedShare(type: SocialBulletinPageItem.SocialButtonType)
}
我有一个这样的枚举数组:
let array = [
.join(hostName: hostName, eventId: event.id),
.notificationPermissions,
.enableNotifications(eventId: event.id),
.share(type: .queue(position: 0, hostName: ""), event: event, view: view)
]
我想创建一个可以从此数组中删除特定枚举的函数。我有以下代码:
func remove(
item: BulletinOption,
from options: [BulletinOption]) -> [BulletinOption] {
var options = options
if let index = options.firstIndex(where: {
if case item = $0 {
return true
}
return false
}) {
options.remove(at: index)
}
return options
}
我想做的是:
let options = remove(item: .enableNotifications, from: options)
array.filter {
if case .enableNotifications = $0 { return false } else { return true }
}
然而,这给了我两个错误。remove
功能显示:
“BulletinAction”类型的表达式模式与“BulletinAction”类型的值不匹配
对于线路:
if case item = $0
第二个错误是调用该函数时:
成员“enableNotifications”需要类型为“(eventId:String)”的参数
我只想删除那个枚举,不管它的参数是什么。我该怎么做呢?目前这是不可能的 实际上,您要做的是将枚举案例模式作为参数传递给方法,以便该方法可以根据该模式匹配数组中的每个值。然而,报告说: 枚举案例模式与现有枚举类型的案例匹配。枚举事例模式出现在
开关
语句事例标签中以及if
、while
、guard
和for in
语句的事例
条件中
这意味着不允许枚举案例模式作为函数的参数:(
因此,您最好能做到以下几点:
let options = remove(item: .enableNotifications, from: options)
array.filter {
if case .enableNotifications = $0 { return false } else { return true }
}
这在目前是不可能的 实际上,您要做的是将枚举案例模式作为参数传递给一个方法,以便该方法可以根据该模式匹配数组中的每个值。但是,该方法表示: 枚举事例模式与现有枚举类型的事例匹配。枚举事例模式出现在
开关
语句事例标签中以及if
、while
、guard
和for in
语句的事例
条件中
这意味着不允许枚举案例模式作为函数的参数:(
因此,您最好能做到以下几点:
let options = remove(item: .enableNotifications, from: options)
array.filter {
if case .enableNotifications = $0 { return false } else { return true }
}