Проблема:
При запуске следующего кода в Xcode 7.3 с swift 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?)
-- Ошибка --
Эта проблема является регрессией в Swift 2.2: https://bugs.swift.org/browse/SR-1024.
T
был выведен какString
, и(nil as T?) is Int?
пройдет, но(nil as String?) is Int?
не пройдет. - person Sulthan   schedule 22.03.2016I am a String?
- person tom   schedule 22.03.2016case
, получитсяI am a String?
. Так что это просто идет для первого, что бы это ни было. - person matt   schedule 22.03.2016