斯威夫特:不需要条件演员,但“必须”?

时间:2016-05-23 11:01:07

标签: swift casting

我收到“as?AnyObject”的警告“条件转换总是成功”。所以“?”它不需要!? 如果我删除“?”,我会收到一个错误,我必须有“可选”:

func toDictionary() -> [String: AnyObject] {
    var retval = [String: AnyObject]()
    if let
        steeringItems   = self.steeringItems   as? AnyObject,
        destinationPath = self.destinationPath as? AnyObject
    {
        retval["steeringItems"] = steeringItems
        retval["gDstPath"] = destinationPath
    }
    return retval
}

正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

可选绑定用于展开选项,您的steeringItemsdestinationPath是非选项。

此外,因为destinationPathString,可以自由地桥接到NSStringsteeringItems[SteeringItem],可以桥接到NSArray {1}}(因为SteeringItemNSObject) - 您可以自由地将它们上传到AnyObject。因此,您不需要进行任何条件转换(因为它永远不会失败)。

所以不要使用可选绑定!只需直接分配属性:

func toDictionary() -> [String:AnyObject] {

    var retval = [String: AnyObject]()

    retval["steeringItems"] = steeringItems
    retval["gDstPath"] = destinationPath

    return retval
}

或者更简洁:

func toDictionary() -> [String:AnyObject] {
    return ["steeringItems":steeringItems, "gDstPath":destinationPath]
}