在C#中,您可以通过将参数声明为类型Enum
来编写一个将任何枚举值作为参数的函数,就像这样......
public enum FirstEnum
{
A,
B,
C
}
public enum SecondEnum
{
D,
E,
F
}
public void StoreValue(Enum key, object value)
{
myDictionary[key] = value; <-- Uses the enum as a key
}
StoreValue(FirstEnum.A, someItem); // Using the first enum type
StoreValue(SecondEnum.D, someItem); // Using the second enum type
StoreValue("Sam", someItem); // Won't compile since 'Sam' is not an enum
你能在Swift中做类似的事情吗?我知道你可以将参数someEnum
声明为一个字符串并以这种方式使用它,但我试图找出它是否可以像C#一样强制执行Enum。
答案 0 :(得分:0)
不完全是。重点是打字很强。
您应该创建一个协议,使枚举符合它并在您的接口定义中使用它。
答案 1 :(得分:0)
根据Wain的建议,你可以这样写:
enum FirstEnum: String
{
case
A,
B,
C
}
enum SecondEnum: String
{
case
D,
E,
F
}
//create a protocol
public protocol StringKeyEnum {
var rawValue: String {get}
}
//make the enumeration(s) conform to it
extension FirstEnum: StringKeyEnum {}
extension SecondEnum: StringKeyEnum {}
var myDictionary: [String: AnyObject] = [:]
//use it in your interface definitions
public func storeValue(key: StringKeyEnum, value: AnyObject)
{
myDictionary[key.rawValue] = value //<-- Uses the rawValue of enum as a key
}
let someItem = ""
storeValue(FirstEnum.A, value: someItem) // Using the first enum type
storeValue(SecondEnum.D, value: someItem) // Using the second enum type
storeValue("Sam", value: someItem) // Won't compile since 'Sam' is not a StringKeyEnum