私はタイプがAny
であると言いますが、これは配列かどうかを知りたいと思います。ここでは何をしたいですか:スウィフトを使用してジェネリックタイプのタイプをチェックする
if myVariable is Array<Int> { }
しかし、私はジェネリック型をチェックする必要はありません:
if myVariable is Array { /* Do what I want */ }
しかし、スウィフトは、アレイなどのジェネリック型を与えることが必要です、私は試しました:
if myVariable is Array<Any> { }
すべての型の配列に一致することを期待していますが、どちらも機能しません。(すべての型の配列と一致しません。したがって、変数がInt配列の場合、このコードは取得できません。
どうすればよいですか?
ありがとうございます。動作していないようなアプローチのソリューションの例と
編集:
struct Foo<T> {}
struct Bar {
var property = Foo<String>()
}
var test = Bar()
let mirror = Mirror(reflecting: test)
// This code is trying to count the number of properties of type Foo
var inputCount = 0
for child in mirror.children {
print(String(describing: type(of: child))) // Prints "(Optional<String>, Any)"
if String(describing: type(of: child)) == "Foo" {
inputCount += 1 // Never called
}
}
print(inputCount) // "0"
関連:http://stackoverflow.com/questions/39443846/how-to-check-if-an-variable-of-any-type-is-an-array –
@MartinR実際に私が配列について話していたとき、一例にすぎませんが、私の問題は他のすべてのジェネリック型にも当てはまるため、はるかに一般的です。 –
@MartinR実際には、特定のクラス/プロトコルにある特定のジェネリック型のプロパティーがいくつあるかをカウントしたいので、それを行うためにリフレクションを使用していますが、私がチェックしたいタイプは一般的なタイプなのでタイプ... –