Protocols conformance checking (is, as) in Swift

private protocol PUID {
    var id: Int {get}
}

private protocol Named {
    var name: String {get}
}

struct Flower: Named {
    var name: String
}

let rose = Flower(name: "Rose")
let isPUID = rose is PUID
//isPId is false

let isNamed = rose is Named
//isNamed is true

let pName = rose as Named
let name = pName.name
//name is "Rose"