До обновления xcode 10.2 (которое включает поддержку swift 5) в следующем коде и "a", и "b" были бы "true", как и предполагалось. Теперь в xcode 10.2 с swift 4.2 в ранее созданном проекте «a» начал оценивать как «false».
Если я изменю проект на swift 5, использую более старую версию xcode или игровую площадку в xcode 10.2, «a» оценивается как «true», как и предполагалось.
Насколько я могу судить, и "a", и "b" никогда не должны быть разными, поскольку T
и Any?
- это одно и то же в этом случае.
Почему эта логика изменится и что я могу сделать, чтобы достичь того же результата?
class Class<T> {
var val: String?
func test(val: Any?) {
let a = val is T
let b = val is Any?
}
}
let thing = Class<Any?>()
thing.test(val: nil)