2016-07-05 4 views
0

После использования этого кода из учебника, который, по-видимому, работал до этого, теперь не работает с помощью swift 3, но я не уверен, почему. Ошибка показывает на линии: если содержит (uniqueValues, значение как T)Ошибка: дополнительный аргумент при вызове

extension Array { 

    func unique<T: Equatable>() -> [T] { 
     var uniqueValues = [T](); 

     for value in self { 
      if !contains(uniqueValues, value as T) { 
       uniqueValues.append(value as! T); 
      } 
     } 
     return uniqueValues; 
    } 

    func first<T>(test:(T) -> Bool) -> T? { 
     for value in self { 
      if test(value as! T) { 
       return value as? T; 
      } 
     } 
     return nil; 
    } 
} 
+2

Вы прыжки с Swift 1.2 до Swift 3 ... это огромный скачок. :) Там много изменений, вы должны прочитать [обновленное руководство по языку] (https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/ UID/TP40014097-СН5-ID309). – Moritz

+0

Это «уникальное» импликация - это O (N^2), вы должны увидеть http://stackoverflow.com/a/33553374/3141234 – Alexander

+0

Еще один здесь: http://stackoverflow.com/questions/32159295/contains-in -xcode-7-бета-5. –

ответ

1

С Swift 2 contains(_:) был переработан в метод экземпляра на Array:

if uniqueValues.contains(value as T) 
+0

Является ли это также расширением протокола SequenceType для последовательностей Equableable элементов (http://stackoverflow.com/a/25391725/1187415). –

+0

@MartinR О, спасибо, я связал неправильную функцию! – Alexander

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