Xcode 8 beta 6 swift 3 localizedCaseInsensitiveCompare

Этот код был скомпилирован на бета-версии Xcode 8, но не работает в бета-версии 6. Какой правильный новый Swift 3 способ сделать это сравнение?

self.categories = categories.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending }

Ошибка

Аргумент проходит к вызову, который не принимает аргументов

2 ответа

Та же проблема здесь. Я попытался скомпилировать фрагмент из официального руководства Swift 3 в бета-версии XCode и получил ту же ошибку - Argument passes to call that takes no arguments, Хотя, когда я использовал IBM Swift Sandbox, он успешно скомпилировался.

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
func backward(_ s1: String, _ s2: String) -> Bool {
return s1 > s2
}
var reversedNames = names.sorted(by: backward)

Из этого видно, что отсортированный API изменился с x.sorted(isOrderedBefore: >) на x.sorted(by: >). Я предполагаю, что в будущей бета-версии Xcode об этом позаботятся.

Мне просто удалось получить то же сообщение об ошибке.

В моем тестовом коде, если я объявляю свойство экземпляра categories как:

var categories: [NSString] = []

Я получил это сообщение об ошибке:

ошибка: аргумент, переданный для вызова, который не принимает аргументов

Если ваш случай очень похож на это, вам нужно изменить объявление свойства на:

var categories: [String] = []

Даже если это не подходит для вашей проблемы, вам лучше проверить это несоответствие типов, потому что в Swift 3/Xcode 8 beta 6:

  • Мостовые преобразования больше не являются неявными. Преобразование из типа значения Swift в соответствующий ему объект может быть принудительно выполнено с помощью as, Например: string as NSString, Любое значение Swift также может быть преобразовано в его коробку id представление с as AnyObject, (SE-0072)

(Взято из заметок о выпуске Xcode 8 beta 6.)

Другие вопросы по тегам