所以我创建了一个类,并使用我创建的枚举中的一个变量进行了类型转换。枚举有一个变量命名描述,我调用并放在页面上,这样当变量改变状态时,它的描述就会更新。
那部分很好,花花公子。但我想在描述中添加一个变量,但让它从该类的对象中引用变量。
以下是一个例子:
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中写道,这样你就能看到我想要做的事。
哦,在每个人都跳过我之前,我花了一些时间试图找到关于此的信息,但是很快就很难找到这些东西的好消息来源。
谢谢!
答案 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
。真的可以没有状态吗?"