更改枚举 Swift 的关联值



如何更改枚举的特定关联值

enum Origin {
case search(searchTerm: String, filtered: Bool)
case category(categoryName:String, subcategoryName:String)
}
@objc class GameSession: NSObject
{
var gameOrigin: Origin?
...
@objc func setIsSearchFiltered(filtered:Bool)
{
if (<gameOrigin is of type .search?>)
{
self.gameOrigin = <change "filtered" associated value to new value>
}
}
....
}

不幸的是,这个问题最近没有帮助我。

只能为变量分配新的枚举值。 如我可以更改枚举的关联值吗?, 可以在 switch 语句中检索当前值的关联值, 具有将关联值绑定到局部变量的大小写模式。

不需要当前关联的filtered值,因此 我们可以在该位置_使用通配符模式。

由于var gameOrigin: Origin?是可选的,我们需要一个带有尾随问号的"可选模式"。

switch gameOrigin {
case .search(let searchTerm, _)?:
gameOrigin = .search(searchTerm: searchTerm, filtered: filtered)
default:
break
}

在具有case和模式的 if 语句中也可以完成相同的操作 匹配:

if case .search(let searchTerm, _)? = gameOrigin {
gameOrigin = .search(searchTerm: searchTerm, filtered: filtered)
}

快速更改枚举关联值

[斯威夫特枚举]

另一个使用[关于] 函数mutating示例

enum Section {
case info(header: String)

mutating func change(newHeader: String) {
switch self {
case .info(let header):
self = .info(header: "(header) (newHeader)")
}
}
}
//changing
var mySection = Section.info(header: "Hello world")
mySection.change(newHeader: "And Peace")
//printing
switch mySection {
case .info(let header):
print(header) //"Hello world And Peace"
}

最新更新