Problema:Tipo di optional non si può dedurre correttamente in rapida 2.2
Quando si esegue il seguente codice sotto Xcode 7.3 con rapido 2.2, il compilatore non è in grado di dedurre correttamente il tipo di optional:
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)
al mio fianco con Xcode 7.3 questo stampa I am an Int?
Tuttavia, quando ho inizializzare la variabile con una stringa vuota prima di passarlo alla funzione, l'interruttore deduce che sia un Stringa?.
Questo dovrebbe stampare I am a String?
nella versione Xcode precedente.
Stai ottenendo risultati simili?
Osservazioni:
Lo stesso accade quando si utilizza questa funzione di firma:
func whatAmI(property:AnyObject?)
- Bug -
Questo problema è una regressione a Swift 2.2: https://bugs.swift.org/browse/SR-1024
Questo sembra un comportamento molto strano, potrebbe effettivamente essere un bug. Vedo che 'T' è stato inferito come' String' e '(nil as T?) È Int?' Passerà ma '(nil as String?) È Int?' Fallirà. – Sulthan
Strano: questo funziona per me su Swift 2.1.1 cioè il programma emette "I am a String?" – tom
Suggerirei di presentare una segnalazione di errore. Davvero molto bello. – matt