从枚举访问父类



所以我创建了一个类,并将其中一个变量类型化为来自我创建的枚举。枚举有一个名为description的变量,我调用它并将其放在页面上,这样当变量更改状态时,它在页面上的描述就会更新。

那部分很好看。但我想在描述中放一个变量,但让它引用该类对象中的变量。

这里有一个例子:

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 Helpn "
        case .beingHelped: if return "Being Helpedn by (super.assignedAssociate)"
        case .requestClosed: return "Completed"
        case .none: return ""
        }
    }
}

因此,正如您所看到的,我想引用assignedAssociate,该对象是从正在被Helped的枚举的描述中的房间类实例化的。

我刚刚在super.assignedAssociated上写了一封信,这样你就可以看到我想做什么。

哦,在每个人都跳到我身上之前,我已经花了一段时间试图找到这方面的信息,但swift仍然是一个很新的东西,很难找到好的来源。

谢谢!

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

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。真的会有"无状态"吗?

最新更新