我有一个关联值的枚举,我想使它等同于测试目的,但不知道这种模式如何适用于具有多个参数的枚举情况.
例如,总结如下,我知道使标题等同的语法.对于包含不同类型的多个值的选项,这将如何工作?
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后使用自动合成:
您还希望将兼容性代码包含在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 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。