更改枚举Swift的关联值

时间:2018-09-27 11:29:39

标签: swift enums

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

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>
        }
    }

    ....
}

This question with answer,很不幸,最近对我没有帮助。

1 个答案:

答案 0 :(得分:3)

您只能为变量分配一个新的枚举值。 与Can I change the Associated values of a enum?中一样, 当前值的关联值可以在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)
}