在 Swift 中枚举枚举的静态变量问题

Con*_*sed 1 enums static swift

Swift 4.2 有一段很棒的代码来枚举枚举,这个问题不仅仅是关于循环枚举。

我有一个这样的枚举:

enum MyEnum: String {
    case session1 = "Morning"
    case session2 = "Noon"
    case session3 = "Evening"
    case session4 = "Night"
}
Run Code Online (Sandbox Code Playgroud)

另外,我想返回一些对象(比如 sessionDetails)。所以我为它创建了一个扩展。

extension RawRepresentable where RawValue == String {
    var details: <Some_Object_Type> {
        /// Create & return corresponding object
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,如果我想获得中午会议的详细信息,我可以这样做:

MyEnum.session2.details
Run Code Online (Sandbox Code Playgroud)

好吧!现在我想对我的会话进行分组,例如第一批和第二批等。所以在 Enum 中添加了一些代码:

enum MyEnum: String {
    case session1 = "Morning"
    case session2 = "Noon"
    case session3 = "Evening"
    case session4 = "Night"

    static let firstBatch = [session1.details, session2.details]
    static let secondBatch = [session3.details, session4.details]
    static let weekendBatch = [session1.details, session4.details]
}
Run Code Online (Sandbox Code Playgroud)

请注意,我们不能将存储的属性与枚举一起使用。这是这里需要“静态”关键字。

我想要的是:

我想获取批次项目的详细信息。以下行将起作用:

MyEnum.firstBatch
Run Code Online (Sandbox Code Playgroud)

它将提供会话 1 和 2 的详细信息(对象)。

问题:

上面的语句只会运行一次,因为它是静态的。每个会话的细节都是动态的,我希望每次使用这个词时都应该调用“细节”.details

笔记:

我必须将分组项目的详细信息提供给其他一些 util 方法。无法更改 util 方法的输入结构。它只需要一组对象来验证。

需要帮助!!

Dáv*_*tor 5

您只需要计算静态属性而不是存储属性。

enum MyEnum: String {
    case session1 = "Morning"
    case session2 = "Noon"
    case session3 = "Evening"
    case session4 = "Night"

    static var firstBatch:[String] {
        return [session1.details, session2.details]
    }

    static var secondBatch:[String] {
        return [session3.details, session4.details]
    }

    static var weekendBatch:[String] {
        return [session1.details, session4.details]
    }
}
Run Code Online (Sandbox Code Playgroud)