Problem:Rodzaj optionals nie można poprawnie wywnioskować w szybkim 2,2
Kiedy uruchomiony następujący kod pod Xcode 7.3 z szybkiej 2.2, kompilator nie jest w stanie prawidłowo wywnioskować typ opcjonalny:
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)
na mojej stronie z Xcode 7.3 to będzie drukować I am an Int?
jednak, kiedy zainicjować zmienną pusty ciąg przed przekazaniem go do funkcji, przełącznik wnioskuje, że jest to Strunowy?.
To mogłoby wydrukować I am a String?
w poprzedniej wersji Xcode.
Czy otrzymujesz podobne wyniki?
Uwagi:
To samo dzieje się w przypadku korzystania z tej opcji Podpis:
func whatAmI(property:AnyObject?)
- Bug -
Ten problem jest regresja w szybkim 2,2: https://bugs.swift.org/browse/SR-1024
To wydaje się dziwne zachowanie, może to być błąd. Widzę, że 'T' został wywnioskowany jako' String' i '(zero jako T?), Czy Int?' Przejdzie, ale '(zero jako String?) Będzie w stanie Int?'. – Sulthan
Dziwne: działa to dla mnie na Swift 2.1.1, tzn. Program wyświetla komunikat "Jestem struną?" – tom
Proponuję zgłoszenie zgłoszenia błędu. Naprawdę bardzo ładnie. – matt