此代码在 Xcode 8 beta 5 上编译,但在 beta 6 中损坏。进行此比较的正确新 Swift 3 方法是什么?
self.categories = categories.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending }
错误是
参数传递给不带参数的调用
此代码在 Xcode 8 beta 5 上编译,但在 beta 6 中损坏。进行此比较的正确新 Swift 3 方法是什么?
self.categories = categories.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending }
错误是
参数传递给不带参数的调用
我刚刚成功收到相同的错误消息。
在我的测试代码中,如果我将实例属性声明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 的发行说明。)
这里同样的问题。我试图从 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)
从这里看,sorted 的 API 似乎从 x.sorted(isOrderedBefore:>) 更改为 x.sorted(by:>)。我想在未来的 Xcode 测试版中,这将得到解决。