我明显遗漏了一些关于enums
如何在Swift中工作的基本知识。请考虑以下情形:
typealias State = String
enum MyStates : State {
case Start, Working, Done
}
我现在希望有一个与State
s相关的函数(例如,作为状态机的一部分等):
func doSomething(s: State) {
print("I got \(s)!")
}
在我看来,我应该能够这样称呼它:
doSomething(MyStates.Start)
但是,这会因以下错误而失败:Cannot convert value of type 'MyStates' to expected argument type 'State' (aka 'String')
我很困惑。在我看来,通过将MyStates
声明为State
类型,MyState
实例应该与State
具有 is-a 关系,并且所以这应该工作。我错过了什么?
答案 0 :(得分:3)
MyState
是枚举类型,State
(又名String
)枚举的原始类型。
您必须传递原始值
typealias State = String
enum MyStates : State {
case Start, Working, Done
}
func doSomething(s: State) {
print("I got \(s)!")
}
doSomething(MyStates.Start.rawValue)
或通常的方式
enum MyStates : String {
case Start, Working, Done
}
func doSomething(s: MyStates) {
print("I got \(s)!")
}
doSomething(MyStates.Start)
答案 1 :(得分:0)
我不确定我是否正确回答了您的问题
但是正如您的标题所说,对于“ Swift中的枚举枚举”,您可以执行以下操作:
enum States {
typealias Start = Api.Objects.Tasks.States.Start
typealias Working = Api.Objects.Tasks.States.Working
typealias Done = Api.Objects.Tasks.States.Done
}
然后您可以引用特定的状态,例如States.Start
而不是Api.Objects.Tasks.States.Start
。