加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使相关值相等的Swift枚举

发布时间:2020-12-14 04:36:23 所属栏目:百科 来源:网络整理
导读:我有一个关联值的枚举,我想使它等同于测试目的,但不知道这种模式如何适用于具有多个参数的枚举情况. 例如,总结如下,我知道使标题等同的语法.对于包含不同类型的多个值的选项,这将如何工作? enum ViewModel { case heading(String) case options(id: String,
我有一个关联值的枚举,我想使它等同于测试目的,但不知道这种模式如何适用于具有多个参数的枚举情况.

例如,总结如下,我知道使标题等同的语法.对于包含不同类型的多个值的选项,这将如何工作?

enum ViewModel {
    case heading(String)
    case options(id: String,title: String,enabled: Bool)
}

func ==(lhs: ViewModel,rhs: ViewModel) -> Bool {
    switch (lhs,rhs) {
    case (let .heading(lhsString),let .heading(rhsString)):
        return lhsString == rhsString
    case options...
    default:
        return false
    }
}

我知道Swift 4.1可以为我们合成Equatable的一致性,但是目前我无法更新到这个版本.

解决方法

一种方便的方法是使用元组可以与==进行比较.
您还希望将兼容性代码包含在Swift版本检查中,以便在项目更新到Swift 4.1后使用自动合成:

enum ViewModel: Equatable {
    case heading(String)
    case options(id: String,enabled: Bool)

    #if swift(>=4.1)
    #else
    static func ==(lhs: ViewModel,rhs: ViewModel) -> Bool {
        switch (lhs,rhs) {
        case (let .heading(lhsString),let .heading(rhsString)):
            return lhsString == rhsString
        case (let .options(lhsId,lhsTitle,lhsEnabled),let .options(rhsId,rhsTitle,rhsEnabled)):
            return (lhsId,lhsEnabled) == (rhsId,rhsEnabled)
        default:
            return false
        }
    }
    #endif
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读