在函数中接受多种类型的枚举

时间:2015-02-27 06:42:45

标签: function swift enums

enum CompassPoint: String, Printable {
    case North = "North"
    case South = "South"
    case East = "East"
    case West = "West"

    var description: String {
        get {
            return self.rawValue
        }
    }
}

enum Cars: String, Printable {
    case Audi = "Audi"
    case Lexus = "Lexus"
    case Volkswagen = "Volkwagen"
    case Jaguar = "Jaguar"

    var description: String {
        get {
            return self.rawValue
        }
    }
}

func someFunction(direction: CompassPoint) {
    println("\(direction)")
}

someFunction(.North) // prints out "North"
someFunction(.Audi) // error(CompassPoint.Type does not have member named 'Audi')

我试图在Swift中创建一个函数,它接受两种类型的枚举,也可能在未来的其他类型。有谁知道如何创建一个接受所有枚举的函数?

2 个答案:

答案 0 :(得分:0)

如何使someFunction的参数类型为Printable?像这样:

func someFunction(typeToPrint: Printable) {
     println("\(typeToPrint)")
}
someFunction(CompassPoint.North)
someFunction(Cars.Audi)

答案 1 :(得分:0)

您可以通过创建另一个包含所有其他枚举的枚举

来使用它
enum CompassPoint: String, Printable {
case North = "North"
case South = "South"
case East = "East"
case West = "West"

var description: String {
    get {
        return self.rawValue
    }
}

}

enum Cars: String, Printable {
case Audi = "Audi"
case Lexus = "Lexus"
case Volkswagen = "Volkwagen"
case Jaguar = "Jaguar"


var description: String {
    get {
        return self.rawValue
    }
}

}

enum combined
{
case comp(CompassPoint)
case car(Cars)
}


func someFunction(direction: combined) {
println("\(direction)")
}




someFunction(combined.comp(.North))// prints out "North"
someFunction(combined.car(.Audi))