写得很好,枚举的关联值很好用的,在实际项目中也是在大量使用。
举个栗子,处理 IM 的自定义消息可以这样写:
由于枚举的特性,所有写 switch 的地方(如果没有 default ),会编译报错,这样在新增自定义消息类型的时候不会漏掉所有要改的地方。
其次可以把需要用的字段从 JSON 里解析出来,放进枚举方便使用。
enum IMMessageType {
/// 0 (普通文本)
case text(content: String)
/// 1 (详情)
case detail(id: Int, name: String)
init(from json: JSON) throws {
guard let messageType = json["messageType"].int else {
throw CommonAPIError.invalidResponsor
}
switch messageType {
case 0:
self = .text(content: json["content"].stringValue)
case 1:
self = .detail(id: json["detailID"].intValue, name: json["detailName"].stringValue)
default:
throw CommonAPIError.invalidResponsor
}
}
var displayText: String {
switch self {
case .text(let content):
return content
case .detail(_, let name):
return "详情-\(name)"
}
}
} |