swift 4.2 - 如果var具有有效的枚举值,我如何检查guard

Posted

技术标签:

【中文标题】swift 4.2 - 如果var具有有效的枚举值,我如何检查guard【英文标题】:swift 4.2 - how can I check with guard if a var has a valid enum value 【发布时间】:2018-10-09 21:21:06 【问题描述】:

我需要检查一个 var, f.e.由 func 传递,是一个有效的枚举值。本身并没有通过,只是在这里作为一个例子。

enum CollectionDict : String   // Mapping to String Model = "Model" or should I ...
    case Model
    case Type
    case Element
    case ....


....
guard  InColectionDict != CollectionDict else  return false 
....

很明显,我的样品守卫线是错误的。我应该使用或做些什么来获得正确的保护,或者至少只是将 InColectionDict 变量与枚举 CollectionDict 进行比较/验证?

我确实希望逃脱..

func makeItem ( _ item: String , with key : String , inCollection : CollectionDict ) -> Bool 
    guard let res = CollectionDict.inCollection else  return false 

但它给了我一个错误。 当然提前谢谢你。

【问题讨论】:

【参考方案1】:

Swift 是强类型的。如果你的函数有一个非可选的 Enum 参数,那么在运行时它保证是一个有效的枚举值。

【讨论】:

谢谢,但我们假设它是可选的。我以为我可以摆脱上面问题中添加的代码部分。但我收到错误 CollectionDict has noMember of inCollection 如果它是可选的,你只需要确保它不为空:guard let myEnum = myEnum else return 。之后,它保证是有效的枚举值。 好的,我明白了。现在清楚了,但是如果我有一个变量可以有不同类型的枚举和它们的值呢?比如 enum1.xxx 或 enum2.yyy。我只想知道如何检查变量是否属于一个枚举或另一个。我希望你能理解我的想法,我想知道如何比较。我的样本不够彻底。 如果你想检查你的枚举是否是一个特定的值(例如,如果它是模型)使用 guard let myEnum == CollectionDict.Model else return 我知道,但那时枚举值在变量中。如果我这样做并且我有 12 乘以 2 的枚举值,我会得到一个很长的开关。那么,如果 Model 位于 InCollectionDict = "Model" 或 InCollectionDict = CollectionDict .Model 之类的变量中怎么办?

以上是关于swift 4.2 - 如果var具有有效的枚举值,我如何检查guard的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4.2 - 如何在枚举函数中使用警报?

具有默认值的 Swift public var 并为该默认值运行 didSet [重复]

Swift 学习- 09 -- 枚举

Swift/IOS/CoreData:如何在自动生成的 CoreData 类中将 var 定义为枚举类型?

Swift-细说枚举(Enum)

在Swift中声明并使用位字段枚举