1

(通过擦除类型,我的意思是: ( Any, AnyHashable, AnyObject), protocol, 或 root class NSObject)。

我问这个问题是因为在下面的代码中我无法初始化somethingAnyObject. 我得到错误:

无法调用类型“AnyObject?”的初始化程序?没有争论

我正在寻找合适的解决方法。我不认为正确的选择是something在每个语句中初始化......

func returnObject() -> AnyObject{

    var something = AnyObject()

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

}
4

1 回答 1

1

你希望初始化做什么?无论如何,如果您打算立即something用或覆盖y,这有什么关系?zt

func returnObject() -> AnyObject {

    let something: AnyObject

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

}

但是,使用 a 更简洁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
    }
}
于 2017-03-27T20:24:53.013 回答