tera
1
what check on variable type would be equivalent to val is T?
protocol P {}
struct S: P {}
func foo<T, R>(_ val: T, _ type: R.Type) {
let a = val is R
let b = T.self == type // FIXME. smth like <= ?
assert(a == b)
}
foo(0, Int.self) // ok
foo([0], [Int].self) // ok
foo(0, Any.self) // assert fails
foo([0], [Any].self) // assert fails
foo(S(), P.self) // assert fails
foo([S()], [P].self) // assert fails
print("done")
jrose
(Jordan Rose)
2
There is no equivalent. is performs the same kind of check as as?, which means it has to know all possible checked run-time conversions. There’s no way to get that effect manually, at least not on arbitrary types.
1 Like
Up to mid-last year,
T.self is R.Type
would have returned true where you're seeing false. It's a bug, and it broke some useful code of mine. 
1 Like