Swift 3のこのswitchステートメントで型推論が機能しないのはなぜですか?

jjatie

更新これはSwift3.1で修正されています

ステートメントに移行する際if-elseに、switch型推論が機能していないことに気づきました。なぜ私が指定する必要がありますHKQuantityTypeIdentifiercaseときquantityTypeIdentifier、すでにその型のでしょうか?

func process(samples: [HKSample]?, quantityTypeIdentifier: HKQuantityTypeIdentifier) {
    DispatchQueue.main.async { [weak self] in            
        if let quantitySamples = samples as? [HKQuantitySample] {
            for sample in quantitySamples {
                switch quantityTypeIdentifier {
                case HKQuantityTypeIdentifier.distanceWalkingRunning:
                    // code

                case HKQuantityTypeIdentifier.activeEnergyBurned:
                    // code

                case HKQuantityTypeIdentifier.heartRate:
                    // code

                default:
                    fatalError("Quantity Type Identifier not implemented \(quantityTypeIdentifier)")
                }
            }
        }
    }
}

次のような関数を呼び出すことができます。

process(samples: samples, quantityTypeIdentifier: .distanceWalkingRunning)
マット

私はあなたがバグを見つけたと思います、あるいは少なくともあなたはそれを主張する合理的なケースを持っています。不整合は、はるかに短い例でうまく示されています。

let c : UIColor = .red
switch c {
case .red : print ("red") // error
default : break
}

それはコンパイルされません。.red1行目では言うことができますが、3行目では言えません。それは明らかに矛盾しているようです。

そうは言っても、2つの異なる場所でルールが異なる理由を確かに説明できます。case発現は、に従って解決される~=オペレータと形成の規則パターンこれらのルールは、Swiftの他のルールとは異なります(したがって、たとえば、パターンで言うasが、他のすべての場所で言う状況があります)。したがって、明らかに、これが機能するために微調整が必​​要なルールです。それらは、裸の列挙型ケースを許可するが、裸の列挙型のような構造体「ケース」(つまり、静的メンバーが構造体自体のインスタンスに評価されるRawRepresentableである構造体の静的メンバー)を許可しないように調整されています。caseas?

最後に、ここで私はときに使用したいというskanky回避策だcaseパターンがあまりにも面倒になるには:

let c : UIColor = .red
switch true {
case c == .red : print ("red") // heh heh
default : break
}

切り替えることでtrue、全体のブール条件をして書き出す我々は、パターンマッチングの限界を打破し、正常な表現の世界を再入力します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Swiftでswitchステートメントがない場合の「case」とはどういう意味ですか?

分類Dev

Swiftの型推論はここで矛盾していますか?

分類Dev

Swift 2.2 からの更新後、switch および case ステートメントが機能しない

分類Dev

「Self」はswitchステートメントで機能しますが、SwiftのIfステートメントでは機能しません

分類Dev

SwiftでUIRefreshControlが機能しないのはなぜですか?

分類Dev

CGAffineTransformMakeRotationがSwiftで機能しないのはなぜですか?

分類Dev

Swift-Switchステートメントが機能しない

分類Dev

SWIFT3で通知が機能しないのはなぜですか?

分類Dev

Swift 3のオプションのチェーン:1つの例が機能し、他の例が機能しないのはなぜですか?

分類Dev

Swiftコードが機能しないのはなぜですか?

分類Dev

なぜprivate(set)がSwiftで機能しないのですか?

分類Dev

Swiftのインフィックス演算子が機能しないのはなぜですか?

分類Dev

Swiftで、GCDが解析で機能しないのはなぜですか?

分類Dev

Swiftで、GCDが解析で機能しないのはなぜですか?

分類Dev

Swift-DispatchGroupがこの関数で機能しないのはなぜですか?

分類Dev

Swiftのこのジェネリックセットの実装が機能しないのはなぜですか?

分類Dev

なぜこのSwiftクロージャで省略引数名が機能しないのですか?

分類Dev

この画像処理テストでSwiftがCの100倍遅いのはなぜですか?

分類Dev

Objective-C / Swiftで非同期ネットワークテストが難しいのはなぜですか?

分類Dev

このswitchステートメントがAngularで機能しないのはなぜですか?

分類Dev

Swiftがクラスのメンバーごとの初期化子を提供しないのはなぜですか?

分類Dev

Swiftのswitchステートメントでは、大文字と小文字の値を重複させることができます。この機能またはバグですか?

分類Dev

「文字列」がswiftを使用してSwitchステートメントの値と一致しないというエラーが発生します。なぜですか?

分類Dev

Swiftのユーザーアラートコードが意図したとおりに機能しないのはなぜですか

分類Dev

このswitchステートメントが機能しないのはなぜですか?

分類Dev

SwiftコードのUICollectionView?コードが機能しないのはなぜですか?

分類Dev

swift スプライト キットでシーンが変更されないのはなぜですか?

分類Dev

Swiftが例外をサポートしないのはなぜですか?

分類Dev

このSwiftタイマーが起動しないのはなぜですか?

Related 関連記事

  1. 1

    Swiftでswitchステートメントがない場合の「case」とはどういう意味ですか?

  2. 2

    Swiftの型推論はここで矛盾していますか?

  3. 3

    Swift 2.2 からの更新後、switch および case ステートメントが機能しない

  4. 4

    「Self」はswitchステートメントで機能しますが、SwiftのIfステートメントでは機能しません

  5. 5

    SwiftでUIRefreshControlが機能しないのはなぜですか?

  6. 6

    CGAffineTransformMakeRotationがSwiftで機能しないのはなぜですか?

  7. 7

    Swift-Switchステートメントが機能しない

  8. 8

    SWIFT3で通知が機能しないのはなぜですか?

  9. 9

    Swift 3のオプションのチェーン:1つの例が機能し、他の例が機能しないのはなぜですか?

  10. 10

    Swiftコードが機能しないのはなぜですか?

  11. 11

    なぜprivate(set)がSwiftで機能しないのですか?

  12. 12

    Swiftのインフィックス演算子が機能しないのはなぜですか?

  13. 13

    Swiftで、GCDが解析で機能しないのはなぜですか?

  14. 14

    Swiftで、GCDが解析で機能しないのはなぜですか?

  15. 15

    Swift-DispatchGroupがこの関数で機能しないのはなぜですか?

  16. 16

    Swiftのこのジェネリックセットの実装が機能しないのはなぜですか?

  17. 17

    なぜこのSwiftクロージャで省略引数名が機能しないのですか?

  18. 18

    この画像処理テストでSwiftがCの100倍遅いのはなぜですか?

  19. 19

    Objective-C / Swiftで非同期ネットワークテストが難しいのはなぜですか?

  20. 20

    このswitchステートメントがAngularで機能しないのはなぜですか?

  21. 21

    Swiftがクラスのメンバーごとの初期化子を提供しないのはなぜですか?

  22. 22

    Swiftのswitchステートメントでは、大文字と小文字の値を重複させることができます。この機能またはバグですか?

  23. 23

    「文字列」がswiftを使用してSwitchステートメントの値と一致しないというエラーが発生します。なぜですか?

  24. 24

    Swiftのユーザーアラートコードが意図したとおりに機能しないのはなぜですか

  25. 25

    このswitchステートメントが機能しないのはなぜですか?

  26. 26

    SwiftコードのUICollectionView?コードが機能しないのはなぜですか?

  27. 27

    swift スプライト キットでシーンが変更されないのはなぜですか?

  28. 28

    Swiftが例外をサポートしないのはなぜですか?

  29. 29

    このSwiftタイマーが起動しないのはなぜですか?

ホットタグ

アーカイブ