Тип опциональных опций не может быть выведен правильно в 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("")