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 public var 并为该默认值运行 didSet [重复]