Рассмотрим эту функцию myFilter
, которая принимает общий аргумент и фильтрует массив на основе предиката. Это то же самое, что и функция filter()
, предоставляемая Swift.
func myFilter<T>(source: [T], predicate:(T) -> Bool) -> [T] {
var result = [T]()
for i in source {
if predicate(i) {
result.append(i)
}
}
return result
}
Как это отличается от
func myFilter(source: [AnyObject], predicate:(AnyObject) -> Bool) -> [AnyObject] {
var result = [AnyObject]()
for i in source {
if predicate(i) {
result.append(i)
}
}
return result
}
Разве мы не достигаем точки дженериков даже в последнем примере?