我可以在AnyObject中使用元组吗?

时间:2015-08-21 22:02:16

标签: swift cocoa-touch tuples

我想知道我是否可以这样做:

override func someCocoaFunc(someParameter:AnyObject?) {
    if let parameter = someParameter as! Tuple {
        let parameterType = parameter.1
        if parameterType == "Heads up, this is an Int" {
            print(parameter.0 + 1) //prints 2
        }
        else {
             //fallback
        }
    }
}
let myTuple = (1,"Heads up, this is an Int")
someCocoaFunc(myTuple)

显然这不起作用,因为元组不是一个阶级,或者至少不是我可以投的任何一个阶级。有没有办法让这个工作,如果是这样的话?如果不是,确定AnyObject类型的最佳方法是什么?我试过了:

if parameter is Bool {
//some code
}
else if parameter is Int {
//some code
}

但它似乎没有用,我认为因为Bool只是一个类型&Int Int?总而言之,我可以在这里使用元组,如果没有,我该怎么办?为了添加一些上下文,我写了一个用于serval不同目标的类,所以我无法确定该值是什么,只是它是Int或Bool。

1 个答案:

答案 0 :(得分:0)

你不能在这里使用元组,因为它们是复合类型,因此没有类。

if的问题在于兼容性BoolInt转换为具有NSNumberboolValue属性的integerValue如果你施放它们会被调用。因此0和1相当于truefalse,因此不明确。

作为解决方案,我建议创建一个将两个值都保存为Optionals的类:

class Holder {
    let boolValue: Bool?
    let intValue: Int?
}