Swiftでジェネリック型の引数を取る関数を再割り当てするにはどうすればよいですか?

newswim

開示、これはSwiftを書く最初の日であり、JS / TSのバックグラウンドから来ています。

私は、次のように、単に関数を再割り当てすることに慣れています。

let assertEqual = XCTAssertEqual

XCTAssertEqualには次の宣言があります。

func XCTAssertEqual<T>(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) where T : FloatingPoint

迅速な遊び場は次のエラーをスローします:

Generic parameter 'T' could not be inferred

この割り当ては特に「価値のある」ものではないことはわかっていますが、将来的には他の関数をジェネリック型パラメーターでエイリアスしたいと思うかもしれません。また、Swift固有の規則についてもっと知りたいと思います。

スイーパー

ここで何をする必要があるかについてのエラーメッセージは非常に明確です-コンパイラにタイプを教えてTください。残念ながら、バインドされていない「一般変数」を持つことはできませんT

これを行うには、関数の完全な型名を書き出す必要がありますXCTAssertEquals<T>。これは、の場合、次のようT == Doubleになります。

(@autoclosure () throws -> Double, @autoclosure () throws -> Double, Double, @autoclosure () -> String, StaticString, UInt) -> ()

だからあなたは必要です:

let assertEqual: (@autoclosure () throws -> Double, @autoclosure () throws -> Double, Double, @autoclosure () -> String, StaticString, UInt) -> () = XCTAssertEqual

私は知っている、それは混乱です。したがって、さまざまなに対してこれをT実行する場合は、最初に長い関数名の型エイリアスを実行できます。

typealias XCTAssertEqualsType<T> = (@autoclosure () throws -> T, @autoclosure () throws -> T, T, @autoclosure () -> String, StaticString, UInt) -> ()

そして、あなたは使用することができますXCTAssertEqualsType<Double>し、XCTAssertEqualsType<Float>など


しかし、正直なところ、このアサート関数のエイリアスを作成する理由がわかりません。関数としての機能の多くが失われます。変数を介して呼び出す場合は、ファイル名と行番号の「マジック」パラメーターを手動で渡す必要があります。オプションの引数はすべて失われ、冒頭で述べたように、ジェネリックは失われます。

関数の名前が違うだけの場合は、自分で別の関数を宣言するだけです。

func anotherName<T>(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) where T : FloatingPoint {
    XCTAssertEqual(try expression1(), try expression2(), accuracy: accuracy, message(), file: file, line: line)
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

この関数をジェネリック型にするにはどうすればよいですか?

分類Dev

ジェネリック関数型にオプションの引数型を含めるにはどうすればよいですか?

分類Dev

引数キーがジェネリック型でリストされていることを確認するにはどうすればよいですか?

分類Dev

Fn(T)+ '静的レジスタを'ジェネリック型引数Tの '静的として作成するにはどうすればよいですか?

分類Dev

ジェネリックを含む引数に基づいて関数の戻り値の型を推測するにはどうすればよいですか?

分類Dev

ジェネリック型パラメーターを使用して関数のベクトルを作成するにはどうすればよいですか?

分類Dev

C#のジェネリック関数で型を渡すにはどうすればよいですか?

分類Dev

SwiftでCollectionTypeを受け取るジェネリック再帰関数を作成するにはどうすればよいですか?

分類Dev

Rで、ジェネリックメソッドが...(ドット)引数を取るように指定するにはどうすればよいですか?

分類Dev

ジェネリック関数の値を作成するにはどうすればよいですか?

分類Dev

C#でジェネリック型引数を指定するときに `dynamic`を使用するにはどうすればよいですか?

分類Dev

2つの関数をジェネリック引数を取る1つの関数にリファクタリングするにはどうすればよいですか?

分類Dev

Scalaのすべての数値で関数をジェネリックとして定義するにはどうすればよいですか?

分類Dev

MLReaderで関数をジェネリックにするにはどうすればよいですか

分類Dev

重要な関係を持つ複数のジェネリック型を持つメンバーを宣言するにはどうすればよいですか?

分類Dev

複数のジェネリック型パラメーターを使用して型を作成するにはどうすればよいですか

分類Dev

C ++でジェネリックstringToVector関数を作成するにはどうすればよいですか?

分類Dev

ジェネリック関数で「typeofT」を参照するにはどうすればよいですか?

分類Dev

FakeItEasyで複数のジェネリック関数の戻り値を設定するにはどうすればよいですか?

分類Dev

TypeScriptのジェネリック関数で有界型を使用するにはどうすればよいですか?

分類Dev

ジェネリックメソッドで実際の型引数を置き換えて、その値引数の最終型を取得するにはどうすればよいですか?

分類Dev

指定されたジェネリック型で関数型を作成するにはどうすればよいですか?

分類Dev

型ジェネリック関数ポインタを渡すにはどうすればよいですか?

分類Dev

Scala:関数の戻り値の型をジェネリックにし、ランタイム引数に依存させるにはどうすればよいですか?

分類Dev

すべてのタイプを非整列化するジェネリック関数を作成するにはどうすればよいですか?

分類Dev

TypeScriptのネストされたオブジェクトに関数の引数型を使用して関数の引数を入力するにはどうすればよいですか?

分類Dev

Swiftでtype引数なしでジェネリッククラスを使用するにはどうすればよいですか?

分類Dev

迅速なジェネリック可変個引数関数を作成するにはどうすればよいですか?

分類Dev

高階関数に渡されるジェネリック関数がvoidの戻り値の型を持つようにするにはどうすればよいですか?

Related 関連記事

  1. 1

    この関数をジェネリック型にするにはどうすればよいですか?

  2. 2

    ジェネリック関数型にオプションの引数型を含めるにはどうすればよいですか?

  3. 3

    引数キーがジェネリック型でリストされていることを確認するにはどうすればよいですか?

  4. 4

    Fn(T)+ '静的レジスタを'ジェネリック型引数Tの '静的として作成するにはどうすればよいですか?

  5. 5

    ジェネリックを含む引数に基づいて関数の戻り値の型を推測するにはどうすればよいですか?

  6. 6

    ジェネリック型パラメーターを使用して関数のベクトルを作成するにはどうすればよいですか?

  7. 7

    C#のジェネリック関数で型を渡すにはどうすればよいですか?

  8. 8

    SwiftでCollectionTypeを受け取るジェネリック再帰関数を作成するにはどうすればよいですか?

  9. 9

    Rで、ジェネリックメソッドが...(ドット)引数を取るように指定するにはどうすればよいですか?

  10. 10

    ジェネリック関数の値を作成するにはどうすればよいですか?

  11. 11

    C#でジェネリック型引数を指定するときに `dynamic`を使用するにはどうすればよいですか?

  12. 12

    2つの関数をジェネリック引数を取る1つの関数にリファクタリングするにはどうすればよいですか?

  13. 13

    Scalaのすべての数値で関数をジェネリックとして定義するにはどうすればよいですか?

  14. 14

    MLReaderで関数をジェネリックにするにはどうすればよいですか

  15. 15

    重要な関係を持つ複数のジェネリック型を持つメンバーを宣言するにはどうすればよいですか?

  16. 16

    複数のジェネリック型パラメーターを使用して型を作成するにはどうすればよいですか

  17. 17

    C ++でジェネリックstringToVector関数を作成するにはどうすればよいですか?

  18. 18

    ジェネリック関数で「typeofT」を参照するにはどうすればよいですか?

  19. 19

    FakeItEasyで複数のジェネリック関数の戻り値を設定するにはどうすればよいですか?

  20. 20

    TypeScriptのジェネリック関数で有界型を使用するにはどうすればよいですか?

  21. 21

    ジェネリックメソッドで実際の型引数を置き換えて、その値引数の最終型を取得するにはどうすればよいですか?

  22. 22

    指定されたジェネリック型で関数型を作成するにはどうすればよいですか?

  23. 23

    型ジェネリック関数ポインタを渡すにはどうすればよいですか?

  24. 24

    Scala:関数の戻り値の型をジェネリックにし、ランタイム引数に依存させるにはどうすればよいですか?

  25. 25

    すべてのタイプを非整列化するジェネリック関数を作成するにはどうすればよいですか?

  26. 26

    TypeScriptのネストされたオブジェクトに関数の引数型を使用して関数の引数を入力するにはどうすればよいですか?

  27. 27

    Swiftでtype引数なしでジェネリッククラスを使用するにはどうすればよいですか?

  28. 28

    迅速なジェネリック可変個引数関数を作成するにはどうすればよいですか?

  29. 29

    高階関数に渡されるジェネリック関数がvoidの戻り値の型を持つようにするにはどうすればよいですか?

ホットタグ

アーカイブ