从枚举访问父类

时间:2015-11-24 19:34:05

标签: swift enums

所以我创建了一个类,并使用我创建的枚举中的一个变量进行了类型转换。枚举有一个变量命名描述,我调用并放在页面上,这样当变量改变状态时,它的描述就会更新。

那部分很好,花花公子。但我想在描述中添加一个变量,但让它从该类的对象中引用变量。

以下是一个例子:

class room: NSObject{
    var roomNumber :Int
    var status: requestStatus = .none
    var assignedAssociate: String?

    init(roomNumber:Int){
        self.roomNumber = roomNumber
    }
}

enum requestStatus {
    case waitingForHelp = "Waiting For Help"
    case beingHelped = "Being helped"
    case requestClosed
    case none

    var description: String {
        switch self {
        case .waitingForHelp: return "Needs Help\n "
        case .beingHelped: if return "Being Helped\n by \(super.assignedAssociate)"
        case .requestClosed: return "Completed"
        case .none: return ""
        }
    }
}

正如您所看到的,我想引用来自对象enHelped的描述中的房间类实例化的对象的assignedAssociate。

我刚刚在super.assignedAssociate中写道,这样你就能看到我想要做的事。

哦,在每个人都跳过我之前,我花了一些时间试图找到关于此的信息,但是很快就很难找到这些东西的好消息来源。

谢谢!

1 个答案:

答案 0 :(得分:1)

事情不会自动知道包含它们的内容(我知道的每种语言都是如此)。您需要使用关联数据将信息存储在枚举中。例如,我可能会这样实现它:

struct Room {
    let roomNumber: Int
    var status: RequestStatus?

    init(roomNumber: Int) {
        self.roomNumber = roomNumber
    }
}

enum RequestStatus {
    case WaitingForHelp
    case BeingHelped(associate: String)
    case Closed

    var description: String {
        switch self {
        case .WaitingForHelp: return "Needs Help"
        case .BeingHelped(let associate): return "Being Helped by \(associate)"
        case .Closed: return "Completed"
        }
    }
}

请注意我删除assignedAssociate的方法。这是故意的。相反,当状态为BeingHelped时,该信息会附加到状态。

另请注意,我删除了.none案例。如果状态可能是"没有"通常用Optional更好地表示。如果你真的想要一个"未分配的状态",那么你应该把它称为Unassigned或类似的东西。 None看起来太像Optional.None,这可能导致令人惊讶的编译器行为。 (另请注意,所有类型和枚举值都应该有一个前导上限。)就个人而言,我也可能只是摆脱Optional。真的可以没有状态吗?"

相关问题