所以我创建了一个类,并将其中一个变量类型化为来自我创建的枚举。枚举有一个名为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
。真的会有"无状态"吗?