Generic function that requires the generic type to be non-optional

Reply to @Nevin and @Lantua

So the v == nil will silently convert T to T?. This is easy to overlook. I guess casting T to Any and then perform the case checking should avoid the silent cast from T to T?:

func bar<T>(_ v: T) {
    if case Optional<Any>.none = v as Any {
        print("\(v) is nil.")
    } else {
        print("\(v) is NOT nil.")
    }
}

let nilInt: Int? = nil
bar(nilInt)

It now prints:

nil is nil.

(or the one from this thread)
Thanks guys.

1 Like