Xcode 8 beta 6 swift 3 localizedCaseInsensitiveCompare
此代码在Xcode 8 beta 5上编译,但在beta 6中损坏。什么是正确的新Swift 3方式来做这种比较?Xcode 8 beta 6 swift 3 localizedCaseInsensitiveCompare
self.categories = categories.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending }
的错误是
Argument passes to call that takes no arguments
我已经成功获得同样的错误消息。
在我的测试代码,如果我声明实例属性categories
为:
var categories: [NSString] = []
我有此错误消息:
error: argument passed to call that takes no arguments
如果你的情况很相似,这一点,你需要将财产声明更改为:
var categories: [String] = []
即使这不适合您问题,您最好检查一下这种类型不匹配的,因为斯威夫特3测试版6/8的Xcode:
(从发行说明两者的Xcode 8测试版6)
问题是self.categories是一个NSArray ?.我认为这个问题与排序命令有关,因为它讨论了参数。 –
@JasonHocker,Swift 3正在迅速发展,Swift团队没有时间去完善它的诊断信息。当Swift找不到匹配的'sorted'超载时,它会返回一个预期的类型(在你的情况下是'NSArray'?),它有时会输出这种不足且令人困惑的信息。我认为这种糟糕的诊断应该被视为bug,并且您最好向Apple或swift.org发送错误报告。 – OOPer
同问题在这里。我试图从Xcode beta官方Swift 3指南中编译一段代码,并得到相同的错误 - 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)
从寻找here,似乎从 x.sorted排序改变了API(isOrderedBefore:>)来x.sorted(按:>)。我想在未来的Xcode测试版中,这将被照顾。
另一种书写方式: var reversedNames = names.sorted(by:{s1,s2 - > Bool in s1> s2}) – Edudjr
如果错误信息真的很糟糕,可能要在bugs.swift.org上提交一个错误。它指出它在说什么? – jtbandes
该代码适用于我,但文档建议使用排序(按: jjatie
你可以在Swift 3中使用'sort'而不用'ed'来排序。 'categories.sort {$ 0.localizedCaseInsensitiveCompare($ 1)== .orderedDescending}' –