Xcode 8 beta 6 swift 3 localizedCaseInsensitiveCompare

时间:2016-08-22 21:55:21

标签: xcode swift3 xcode8-beta6

此代码在Xcode 8 beta 5上进行了编译,但在测试版6中已经破解。什么是正确的新Swift 3方式进行此比较?

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

错误是

  

参数传递给不带参数的调用

2 个答案:

答案 0 :(得分:1)

我刚刚成功获得了相同的错误消息。

在我的测试代码中,如果我将实例属性categories声明为:

var categories: [NSString] = []

我收到此错误消息:

  

错误:传递给不带参数的调用的参数

如果您的情况非常类似,则需要将属性声明更改为:

var categories: [String] = []

即使这不适合您的问题,您最好检查一下这种类型不匹配,因为从Swift 3 / Xcode 8 beta 6开始:

  
      
  • 过渡转换不再含蓄。可以使用as强制从Swift值类型到其对应对象的转换。   例如:string as NSString。任何Swift值也可以   使用id转换为带框的as AnyObject表示形式。   (SE-0072)
  •   

(取自Xcode 8 beta 6的发行说明。)

答案 1 :(得分:1)

这里的问题相同。我试图从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开始,似乎排序的API发生了变化 x.sorted(isOrderedBefore:>)到x.sorted(by:>)。我想在未来的Xcode测试版中,这将得到解决。