说所有擦除类型都是不可初始化的是否正确?

时间:2017-03-27 20:21:57

标签: swift type-erasure initializer anyobject

(通过删除类型,我的意思是:(AnyAnyHashableAnyObject),protocol或根类NSObject)。

我问这个问题,因为在下面的代码中我无法将something初始化为AnyObject。我收到错误:

  

无法为“AnyObject”类型调用初始化程序?没有参数

我正在寻找合适的workAround。我认为正确的选择是在每个陈述中初始化something ......

func returnObject() -> AnyObject{

    var something = AnyObject()

    if x == someProperty{
        something = y
    }
    else if x == anotherProperty{
        something = z
    }else{
        something = t
    }
    return something   

}

1 个答案:

答案 0 :(得分:2)

您希望初始化做什么?无论如何,如果您计划立即使用somethingyz覆盖t,这有什么关系?

func returnObject() -> AnyObject {

    let something: AnyObject

    if x == someProperty{
        something = y
    }
    else if x == anotherProperty{
        something = z
    }
    else{
        something = t
    }
    return something   

}

但是,使用switch

更简洁
func returnObject() -> AnyObject {
    let something: AnyObject

    switch x {
        case someProperty:    something = y
        case anotherProperty: something = z
        default:              something = t
    }

    return something
}

如果您刚刚返回something,则可以将其内联:

func returnObject() -> AnyObject {
    switch x {
        case someProperty:    return y
        case anotherProperty: return z
        default:              return t
    }
}