ios - Swift 中类型别名的枚举

标签 ios swift xcode macos enums

我显然遗漏了一些关于 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-aState 的关系,因此这应该有效。我错过了什么?

最佳答案

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/

相关文章:

ios - 将 slider 关联到 Float 属性

ios - 在NSMutableArray中删除

objective-c - 在 View 中循环播放视频

ios - SwiftUI:如何使 TextField 适合多行内容?

ios - 突出显示时 UIButton 周围不需要的不可见检测区域

ios - CLLocation 跟踪 iPhone 在哪条路上

json - Swift - 无法使用泛型转换类型的值

ios - guard let - 一行中的连续语句必须用 ';' 3 分隔

ios - UISlider值将 float 转换为百分比

ios - 了解 OpenGL ES : CATransform3DScale instead of glScalef?