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

如何使相关值相等的Swift枚举,第1张

概述我有一个关联值的枚举,我想使它等同于测试目的,但不知道这种模式如何适用于具有多个参数的枚举情况. 例如,总结如下,我知道使标题等同的语法.对于包含不同类型的多个值的选项,这将如何工作? enum ViewModel { case heading(String) case options(id: String, title: String, enabled: Bool)}fun @H_403_1@ 我有一个关联值的枚举,我想使它等同于测试目的,但不知道这种模式如何适用于具有多个参数的枚举情况.

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

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

以上是内存溢出为你收集整理的如何使相关值相等的Swift枚举全部内容,希望文章能够帮你解决如何使相关值相等的Swift枚举所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1005050.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存