15

問題:

Swift 2.2 を使用して Xcode 7.3 で次のコードを実行すると、コンパイラはオプションの型を正しく推測できません。

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

4

1 に答える 1

3

これはバグのようです。最小限の例は次のとおりです。

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("")
于 2016-03-23T11:57:27.810 に答える