2015-09-24 2 views
0

У меня есть функция, которая принимает параметр [String: AnyObject]?Принимать параметр с различными типами данных?

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

В большинстве случаев я обычно просто отправить словарь <String, AnyObject>, который прекрасно работает.

В случае, если у меня возникла проблема, теперь я пытаюсь добавить параметр, который имеет словарь как значение.

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 я получаю ошибку:

'NSDictionary' is not convertible to '[String : AnyObject]'; did you mean to downcast?

Теперь ошибка является довольно понятны, но я не знаю, как я могу позволить моя функция, чтобы этот тип данных и до сих пор работа с текущими типами данных.

Я использую эту функцию в довольно многих местах и ​​не хочу дублировать ту же логику, чтобы принять другой параметр.

ответ

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], но он будет работать, тем не менее).

+0

Спасибо, простой ответ :) –

+0

Добро пожаловать. :) – Moritz