我有一个接受Any的
Swift函数,我希望它可以接受一个字符串数组,一个Ints数组,一个混合数组或数组数组等.它也可以接受一个String或一个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”]),则提出该断言.如何捕获所有类型的数组?
编辑 – 有什么我想要完成的一些混乱.我基本上需要返回一个基于类型的String,所以Int – > “”和String – > “”,所以一个数组将进行递归调用返回“…”
这个帖子被标记为重复,但另一个问题是关于Javascript,而不是Swift.
我终于找到了这样做,那就是使用NSArray进行投射.
原文链接:https://www.f2er.com/swift/318778.htmlprivate 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
它看起来是一个包含NSArray内部表示的Any的数组.(但是应该能够将c转换为[Any] …?我怀疑这是一个错误.)