代码之家  ›  专栏  ›  技术社区  ›  PopKernel

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

  •  0
  • PopKernel  · 技术社区  · 11 年前

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

    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)
    

    显然,这不起作用,因为Tuple不是一个类,或者至少不是一个我无论如何都可以选择的类。有没有办法让它发挥作用,如果有,怎么做?如果没有,确定 AnyObject ? 我尝试了:

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

    但它似乎不起作用,我想,因为布尔只是一个类型别名‘Int或什么的?总之,我能在这里使用元组吗?如果不能,我该怎么做?为了添加一些上下文,我正在编写一个用于几个不同目标的类,所以我不能确定值是什么,只是它是Int或Bool。

    1 回复  |  直到 11 年前
        1
  •  0
  •   Qbyte    11 年前

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

    问题在于 if 这是为了兼容性吗 Bool 和 Int 转换为 NSNumber 有一个 boolValue 和 integerValue 属性,如果您对其进行强制转换,则会调用该属性。所以0和1等于 true 和 false 因此不明确。

    作为解决方案,我建议创建一个同时包含两个值的类 Optionals :

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