接受具有不同数据类型的参数?

时间:2015-09-24 17:37:59

标签: swift

我有一个接受[String: AnyObject]?

参数的函数
func myfunction(parameters: [String: AnyObject]?) {
    // I handle everything here
}

在大多数情况下,我通常只会发送<String, AnyObject>的字典,效果很好。

如果我现在遇到问题,我会尝试添加一个将Dictionary作为值的参数。

let parameters = [
    "products_in_basket": [
        "id": product.Id,
        "size": 12,
        "colour": "red",
        "quantity": 1
    ],
    "shipping_address_id": self.currentAddress!.Id,
    "shipping_option": 0,
    "payment_card_id": self.currentCard!.Id
]

// All above works ok until now
myfunction(parameters: parameters) {

}

当我调用myfunction时,我收到错误:

  

&#39;的NSDictionary&#39;不能转换为&#39; [String:AnyObject]&#39 ;;你的意思是贬低?

现在错误是非常自我解释的,但我不确定如何允许我的函数允许这种数据类型并仍然可以使用当前数据类型。

我在很多地方使用此功能,并且不想复制完全相同的逻辑只是为了接受不同的参数。

1 个答案:

答案 0 :(得分:1)

实际上你不必贬低,你应该通过明确地给你的字典提供正确的类型来帮助编译器理解会发生什么:

let parameters: [String:AnyObject] = [
    "products_in_basket": [
        "id": product.Id,
        "size": 12,
        "colour": "red",
        "quantity": 1
    ],
    "shipping_address_id": self.currentAddress!.Id,
    "shipping_option": 0,
    "payment_card_id": self.currentCard!.Id
]

这样编译器就不会要求你进行向下转换,你的功能会按预期工作。

注意:这是针对Swift 1.2的 - 不需要使用Swift 2显式设置类型(类型将被推断为[String:NSObject],但它仍然可以工作)。