2015-07-11 3 views
0

Старая версия кода перед XCode 7 Beta 3:XCode 7 Beta 3 - расширение массива

extension Array { 
    func filterByIndex<S: SequenceType where S.Generator.Element == Int>(indices: S) -> [T] { 
     return Array(PermutationGenerator(elements: self, indices: indices)) 
    } 

    func find(includedElement: T -> Bool) -> Int? { 
     for (idx, element) in self.enumerate() { 
      if includedElement(element) { 
       return idx 
      } 
     } 
     return nil 
    } 

} 

Новая версия кода после XCode 7 Beta 3:

extension Array { 
    func filterByIndex<S: SequenceType where S.Generator.Element == Int>(indices: S) -> [Element] { 
     return Array(PermutationGenerator(elements: self, indices: indices)) 
    } 

    func find(includedElement: Element -> Bool) -> Int? { 
     for (idx, element) in self.enumerate() { 
      if includedElement(element) { 
       return idx 
      } 
     } 
     return nil 
    } 
} 

Но теперь функция filterByIndex дает меня ошибка, когда я пишу эту строку:

let names = (namesArr as! [String]).filterByIndex(dupes) 

«[String]» не имеет элемент с именем «фи lterByIndex '

Что изменилось?

+0

Я согласен с @Arkku, код, похоже, работает нормально. Я думаю, если бы вы могли привести пример 'namesArr' и' dupes', которые могли бы помочь сузить проблему (и обязательно включить типы для них). – justinpawela

ответ

0

Новая версия кода отлично работает для меня:

[ "zero", "one", "two", "three", "four" ].filterByIndex([1, 3]) 
// result: [ "one", "three" ] 

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

+0

'пусть Повторные = indicesOfUniques (namesArr, как [String]!)' ' общественного функ indicesOfUniques (источник: [T]) -> [Int] { вар видел: Set = [] возврата source.indices. фильтр { , если seen.contains (источник [$ 0]) { возвращение ложным } еще { seen.insert (источник [$ 0]) возвращает истину }} } ' Я изменил T с элементом в indicesOfUniques и не работает ... –

+0

@BogdanBogdanov Пробовал ли вы код из моего ответа? Если это сработает для вас, тогда вопрос неправильный, и проблема связана с 'dupes' или' namesArr'. Чтобы увидеть, какой из них, поочередно, замените каждый из них вручную созданным массивом. – Arkku

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