如何编写协议扩展以从Swift枚举获取所有rawValues

乔纳·加布里埃尔

我正在尝试做的是创建一个协议扩展,以从枚举中获取原始值的数组。例如说我有以下内容:

enum TestType: String, EnumIteratable {
    case unitTest = "Unit Test"
    case uiTest = "UI Test"
}

class EnumIterator: NSObject {
    class func iterateEnum<T: Hashable>(_: T.Type) -> AnyGenerator<T>  {
        var i = 0
        return anyGenerator {
            let next = withUnsafePointer(&i) { UnsafePointer<T>($0).memory }
            return next.hashValue == i++ ? next : nil
        }
    }

   class func getValues<T: Hashable>(_: T.Type) -> [T] {
        let iterator = self.iterateEnum(T)
        var returnArray = [T]()
        for val in iterator {
            returnArray.append(val)
        }
        return returnArray
    }

}

如何实现协议EnumIteratable,以便可以调用TestType.getRawValues()并使其返回所有原始枚举值的字符串数组?

谢谢!

斯科特·加德纳

您可以添加一个静态属性以返回所有枚举值。例如:

 enum RelationshipStatus: String {

  case Single = "Single"
  case Married = "Married"
  case ItsComplicated = "It's complicated"

  static let all: [RelationshipStatus] = [.Single, .Married, .ItsComplicated]

}

for status in RelationshipStatus.all {
  print(status.rawValue)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带枚举的Swift协议扩展

Swift-如何获取从协议扩展的类?

Swift获取协议的所有KeyPath

如何为所有枚举构建扩展名?

在Swift中,如何在协议扩展中使用通用枚举类型?

带有嵌套枚举的Swift枚举,如何实现RawRepresentable协议字符串中的关联值

带有递归枚举的Swift Codable协议

如何在Swift协议中定义枚举

如何使枚举符合Swift中的协议?

如何在Swift中列出所有符合协议的类?

我如何编写可向下滚动到结尾的Chrome扩展的JavaScript代码(我想获取所有Facebook朋友列表)

如何获取Java中的所有枚举值?

如何获取所有枚举值作为数组

如何从python枚举类获取所有值?

如何使用打字稿获取枚举的所有值?

如何从 TypeScript 中的数字获取所有枚举标志?

Swift协议扩展,具有符合协议的属性

协议扩展在Swift中如何工作?

如何在Swift中扩展协议

如何编写xsl来获取所有重复标签的值?

如何编写代码以获取类的所有属性?

如何编写 Python 来获取所有 Gmail 邮件 ID?

如何获取在另一个枚举中声明的所有嵌套枚举的集合或数组?

如何在Java中获取枚举的所有可能值?(不知道具体的枚举)

具有通用枚举和通用协议的Swift类型擦除

扩展所有Swift对象

如何在Swift中使用扩展协议在Obj-C类上公开现有属性

如何在Swift中为私有枚举编写一个相等的方法

如何在Swift中确认可识别协议的枚举?