0

私は現在、ジェネリック関数の使用法を学んでおり、ドキュメントのいくつかの既存の例でジェネリック関数が解決する問題に気づきました。

したがって、同じスキームを実行する関数を繰り返し続ける代わりに、そのように汎用関数を使用できます。

func swapTwoValues<T>(inout a: T, inout b: T) {
    let temporaryA = a
    a = b
    b = temporaryA
}

しかし、もう少し考えてみると、そのためにコマンドAnyを使用できます。

func swapTwoStrings(inout a: Any, inout b: Any) {
    let temporaryA = a
    a = b
    b = temporaryA
}

では、 Anyを使用してジョブを実行できるのに、なぜジェネリック関数を使用するのでしょうか?

4

2 に答える 2

1

を使用するgeneric functionsと、ここで T は型です。コードでは、 a と be が同じ型であることを意味します。

func swapTwoValues<T>(inout a: T, inout b: T) {
    let temporaryA = a
    a = b
    b = temporaryA
}
var a = 1
var b = 2
var c = "1"
var d = "2"
var e = 1
var f = "2"
swapTwoValues(&a, &b)//rihgt
swapTwoValues(&c, &d) //rihgt
swapTwoValues(&e, &f) //Wrong

a と b が同じ型かどうかわからない場合は any を使用します。**そのため、関数が複雑な場合は、型を動的にチェックする必要があります。**また、2 つの関数を使用する場合にもいくつかの違いがあります。

func swapTwoAny(inout a: Any, inout b: Any) {
    let temporaryA = a
    a = b
    b = temporaryA
}

次に例 1

  var a = 1
  var b = "2"
  swapTwoAny(&a, &b)//Wrong

例 2

var a = 1 as Any
var b = "2" as Any
swapTwoAny(&a, &b) //Right.
于 2015-08-09T01:43:50.307 に答える
0

物事を交換するだけなら、Any よりもジェネリックを使用する必要はおそらくないでしょう。ただし、実際に引数でメソッドを呼び出す場合は、それらのメソッドを持つ型にキャストするか (詳細、実行時に失敗する可能性があり、低速)、ジェネリック パラメーターを使用する必要があります。

于 2015-08-09T01:25:24.070 に答える