【发布时间】:2016-02-05 11:20:35
【问题描述】:
我有一个包含两个这样的枚举的类(很简单):
class Errors {
enum UserError: String {
case NoToken = "No token!"
case NoPassword = "No password!"
}
enum BackendError: String {
case NoConnection = "No connection!"
case ServerBusy = "Server is busy!"
}
}
现在我想编写一个通用函数,它接受 UserError 或 BackendError 并根据输入返回一个字符串。像这样的:
func alert(type: /* Accepts Error.UserError or BackendError*/) -> String {
// checks if UserError or BackendError and returns .rawValue
}
我的第一个方法是使用泛型 - 但坦率地说,我在理解这个概念时遇到了困难,而且我有一种倾向,我在这里根本就错了。我所做的是:
func alert<T>(type: T) {
if type == Errors.UserError {
return Errors.UserError.NoPassword.rawValue
} else {
return Errors.BackendError.NoConnection.rawValue
}
}
显然,这不起作用。
binary operator cannot be applied to operands of type 'T' and 'Errors.UserError.Type'
我知道这与缺少实现 Equatable/Comparable 协议以及我对使用泛型的普遍缺乏了解有关。我的问题是:
如何将我的通用“类型”参数与我的枚举进行比较?
我对泛型的理解完全错误吗?
另外:我想避免使用AnyObject 方法。
【问题讨论】:
标签: swift generics enums comparable equatable