arrays - 如何判断变量是否为数组

标签 arrays swift

我有一个接受 Any 的 Swift 函数,我希望它能够接受字符串数组、整数数组、混合数组或数组数组等。它也可以只接受字符串或Int 等,不在数组中。

所以我有这个:

    private func parse(parameter: Any) {
        if parameter is Int {
            // Int
        } else if (parameter is Float) || (parameter is Double) {
            // Double
        } else if parameter is String {
            // String
        } else if parameter is Bool {
            // Bool
        } else if let array = parameter as? [Any] {
            // Should catch all Arrays
        } else {
            assert(false, "Unsupported type") // [String] ends up here
        }
    }

但是如果我调用 parse(["Strings"]),就会引发断言。我怎样才能捕获所有类型的数组?

编辑 - 对于我要完成的事情有些困惑。我基本上需要根据类型返回一个字符串,所以 Int -> ""和 String -> "",所以数组会进行递归调用以返回 "..."

这篇文章被标记为重复,但另一个问题是关于 Javascript,而不是 Swift。

最佳答案

我终于找到了方法,那就是使用 NSArray 进行转换。

private func parse(x: Any) {
    if let o = x as? [Any] {
        println("[Any]")
    }
    if let o = x as? [AnyObject] {
        println("[AnyObject]")
    }
    if let o = x as? NSArray {
        println("NSArray")
    }
}

let a: [Any] = ["bar"]
let b: [AnyObject] = ["bar"]
let c = ["foo", 3.14]

parse(a) // ==> [Any]
parse(b) // ==> [AnyObject], and also NSArray
parse(c) // ==> NSArray

它看起来是一个包含 Any 值的数组,内部表示在 NSArray 中。 (但它是否应该能够将 c 转换为 [Any]...?我怀疑这是一个错误。)

关于arrays - 如何判断变量是否为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226911/

相关文章:

java - Java中如何将一维数组转换为二维数组

javascript - typescript 运行时数组类型 .map 方法可用

ios - Json Values Append Array 但 ViewDidLoad 看起来是空的

ios - IOS swift 4 中的点对点连接

arrays - PowerShell:将对象的 ArrayList 作为参数传递到另一个脚本中

arrays - 方括号从何而来?

python - 扩展数据类型?列表和关系的最佳数据结构?

ios - 我根本没有使用 Storyboard,但我仍然收到此错误

ios - 自动滚动图像并对点击图像执行操作

ios - 如何在Swift 5中检查3个变量是否彼此相等?