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.)