控制流 / 条件语句 / switch/case 语句

struct Point<T> {
    let x, y: T
}

func describe<T>(_ point: Point<T>) -> String {
    switch point {
    case is Point<Int>:
        return "Point (int, int)"
    case is Point<Double>:
        return "Point (double, double)"
    default:
        return "Point (\(point.x), \(point.y))"
    }
}

let p1 = Point(x: 3, y: 4)
let desc1 = describe(p1)
//desc1 is "Point (int, int)"

let p2 = Point(x: 7.1, y: 4.6)
let desc2 = describe(p2)
//desc2 is "Point (double, double)"

let p3 = Point(x: "a", y: "b")
let desc3 = describe(p3)
//desc3 is "Point (a, b)"

print("desc1 is \"\(desc1)\"")
print("desc2 is \"\(desc2)\"")
print("desc3 is \"\(desc3)\"")