任意の配列として迅速なプロトコル配列をキャストしようとしましたが失敗しました。任意の型の変数が配列であるかどうかをチェックする方法
protocol SomeProtocol: class{
}
class SomeClass: NSObject, SomeProtocol{
}
let protocolArray: [SomeProtocol] = [SomeClass()]
let value: Any? = protocolArray
if let _ = value as? [SomeProtocol]{
print("type check successed") //could enter this line
}
上記のコードは期待どおりに機能する可能性があります。 しかし、私の問題は、私はたくさんのプロトコルを持っており、それらを一つずつチェックしたくないということです。新しいプロトコルを追加するのは親切ではありません。
上記の「値」が以下のような配列であるかどうかチェックする便利な方法はありますか?
if let _ = value as? [Any]{
print("type check successed") //never enter here
}
編集:のRohit Parsanaの答えに触発さ
、コードの下に仕事ができる:
if let arrayType = value?.dynamicType{
let typeStr = "\(arrayType)"
if typeStr.contains("Array"){
print(typeStr)
}
}
しかし、これらのコードは十分に安全ではないようで、たとえば、あなたが名前のクラスを宣言することができます"abcArray"
「typeStr」が「Array < *>」と一致するかどうかを確認するために正規表現を使用することはできますが、あまりにも扱いにくいようです。
もっと良い解決策はありますか?
これはすばらしいことです!ありがとう! –