带有数组的Swift countElements()

时间:2014-09-17 22:17:50

标签: generics casting swift

问题

是否可以在我的设置中使用countElements()调用Array


详细问题

countElements()String一起正常工作。但是,我无法弄清楚如何将thing投射到Array,从而无法调用countElements()

请注意,方法签名必须为func myCount(thing: Any?) -> Int,因为这是used in my open source project

func myCount(thing: Any?) -> Int {
    if thing == nil {
        return -1
    }
    if let x = thing as? String {
        return countElements(x)
    }
    if let y = thing as? Array<Any> {
        return countElements(y)    // this if is never taken
    }
    return -1
}

myCount(nil)        // -1
myCount("hello")    // 5
myCount([1, 2, 3])  // BOOM, returns -1, I'm expecting 3 returned

1 个答案:

答案 0 :(得分:2)

这对我有用。虽然来回晃动但感觉有些笨拙。

func myCount(thing: Any?) -> Int {
    if thing == nil {
        return -1
    }
    if let x = thing as? String {
        return countElements(x)
    }
    if let y = thing as? NSArray {
        return countElements(y as Array)
    }
    return -1
}