Тип опциональных опций не может быть выведен правильно в swift 2.2

Проблема:

При запуске следующего кода в Xcode 7.3 с быстрым 2.2 компилятор не может правильно указать тип необязательного:

import Foundation

func whatAmI<T>(inout property:T?)
{
    switch property {
    case is Int?:
        print("I am an Int?")
    case is String?:
        print("I am a String?")
    default:
        print("I don't know what I am")
    }
}

var string : String?
whatAmI(&string)

На моей стороне с Xcode 7.3 это напечатает I am an Int?

Однако, когда я инициализирую переменную пустой строкой перед ее передачей в функцию, коммутатор передает ее как String?.

Это будет печатать I am a String? в предыдущей версии Xcode.

Получают ли вы похожие результаты?

Замечания:

То же самое происходит при использовании этой сигнатуры функции:

func whatAmI(property:AnyObject?)

- Ошибка -

Эта проблема является регрессией в быстром 2.2: https://bugs.swift.org/browse/SR-1024

Ответы

Ответ 1

Кажется, это ошибка. Минимальный пример:

func genericMethod<T>(property: T?) {
    print(T) // String

    let stringNil = Optional<String>.None

    print(stringNil is String?) // true (warning - always true)    
    print(stringNil is T?) // true

    let intNil = Optional<Int>.None

    print(intNil is String?) // false (warning - always fails)
    print(intNil is T?) // true - BUG
}

genericMethod("")