我显然遗漏了一些关于 enums
在 Swift 中如何工作的基本知识。考虑以下场景:
typealias State = String
enum MyStates : State {
case Start, Working, Done
}
我现在想要一个函数来处理 State
(例如,作为状态机的一部分等):
func doSomething(s: State) {
print("I got \(s)!")
}
在我看来,我应该可以这样调用它:
doSomething(MyStates.Start)
但是,这会失败并出现以下错误:无法将“MyStates”类型的值转换为预期的参数类型“State”(又名“String”)
我很困惑。在我看来,通过将 MyStates
声明为 State
类型,MyState
实例应该有一个 is-a与 State
的关系,因此这应该有效。我错过了什么?
最佳答案
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)
关于ios - Swift 中类型别名的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38925203/