Как проверить, является ли переменная любого типа массивом

Я пытался преобразовать массив протоколов swift как любой массив, но потерпел неудачу.

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
}

редактировать:

Вдохновленный ответом Рохита Парсана, может сработать следующий код:

if let arrayType = value?.dynamicType{
    let typeStr = "\(arrayType)"
    if typeStr.contains("Array"){
         print(typeStr)
    }
}

Но этот код кажется недостаточно безопасным, например, вы можете объявить класс с именем "abcArray".

Хотя мы могли бы использовать регулярное выражение для проверки соответствия «typeStr» «Array <*>», оно кажется слишком сложным.

Есть ли лучшее решение?

Ответы на вопрос(2)

Ваш ответ на вопрос