Быстрое расширение массива «где»

Начиная с Swift 2.0 кажется, что мы можем приблизиться к расширениям универсальных типов, применимым к предикатным ситуациям.

Хотя мы все еще не можем сделать это:

protocol Idable {
    var id : String { get }
}

extension Array where T : Idable {
    ...
}

... теперь мы можем сделать это:

extension Array {
    func filterWithId<T where T : Idable>(id : String) -> [T] {
    ...
    }
}

... и Свифт грамматически принимает это. Однако я не могу понять, как порадовать компилятор, когда я заполняю содержимое функции примера. Предположим, я должен был быть настолько явным, насколько это возможно:

extension Array {
    func filterWithId<T where T : Idable>(id : String) -> [T] {
        return self.filter { (item : T) -> Bool in
            return item.id == id
        }
    }
}

... компилятор не примет закрытие, предоставленное для фильтрации, жалуясь

Невозможно вызвать 'filter' со списком аргументов типа '((T) -> Bool)'

Аналогично, если элемент указан как Idable. Кому-нибудь здесь повезло?

Ответы на вопрос(1)

Ваш ответ на вопрос