2015-12-16 2 views
2

Использование Swift 2.xConfused по проблеме типа с Содержит и словарь/[String: String]

я борюсь с помощью Содержит два массива словарей. Я постоянно получаю следующее исключение, но я не совсем уверен, почему:

"Cannot convert value of type '[String : String]' to expected 
argument type '@noescape ([String : String]) throws -> Bool'" 

Код:

var d1: [[String:String]] = [["k1": "v1"], ["k2": "v2"]] 
var d2: [[String:String]] = [["k1": "v1"], ["k3": "v3"]] 

d1 = d1.filter { (element) -> Bool in 
    return !d2.contains(element) 
} 

Screenshot of code and exception

Когда я вместо того, чтобы использовать что-то вроде ...

d1 = d1.filter { (d1_entry) -> Bool in 
    for d2_entry in d2 { 
    if d2_entry == d1_entry { 
     return false 
    } 
    } 
    return true 
} 

Все работает отлично, но ... это очень клочья и многословная для того, что кажется быть эквивалентной логикой ...?

Я знаю, что у меня отсутствует что-то действительно очевидное/фундаментальное, но я не уверен, что/где/почему.

Любые предложения высоко ценится

ответ

0

Вы не выполнили замыкание содержит() правильно, это должно быть так:

var d1: [[String:String]] = [["k1": "v1"], ["k2": "v2"]] 
var d2: [[String:String]] = [["k1": "v1"], ["k3": "v3"]] 

d1 = d1.filter { (element) -> Bool in 
    return !d2.contains({ (element) -> Bool in 
     // Define condition 
    }) 
} 
+0

Wow - не понимал, что мне пришлось реализовать закрытие для словаря, но, я думаю, это имеет смысл. Виноват. Спасибо за информацию. – eww

0

Содержит требует закрытия. Попробуй это.

return !d2.contains {$0 == element} 
+0

Спасибо - оцените помощь – eww

Смежные вопросы