Xcode 8 beta 6 swift 3 本地化CaseInsensitiveCompare

Posted

技术标签:

【中文标题】Xcode 8 beta 6 swift 3 本地化CaseInsensitiveCompare【英文标题】:Xcode 8 beta 6 swift 3 localizedCaseInsensitiveCompare 【发布时间】:2016-08-22 21:55:20 【问题描述】:

这段代码是在 Xcode 8 beta 5 上编译的,但在 beta 6 中被破坏了。进行这种比较的正确的新 Swift 3 方法是什么?

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

错误是

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

【问题讨论】:

如果错误信息真的这么糟糕,可能想在 bugs.swift.org 上提交一个错误。它是否指向它正在谈论的呼叫? 代码对我有用,但文档也建议使用 sorted(by: 您可以在 Swift 3 中使用 sort 而不使用 ed 进行就地排序。 categories.sort $0.localizedCaseInsensitiveCompare($1) == .orderedDescending sorted(by: 我已经用更多上下文更新了上面的代码 【参考方案1】:

我刚刚成功收到同样的错误信息。

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

var categories: [NSString] = []

我收到此错误消息:

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

如果你的情况与此非常相似,则需要将属性声明改为:

var categories: [String] = []

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

桥接转换不再是隐式的。可以使用as 强制从 Swift 值类型到其对应对象的转换。 例如:string as NSString。任何 Swift 值也可以是 使用as AnyObject 转换为其装箱的id 表示。 (SE-0072)

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

【讨论】:

问题是 self.categories 是一个 NSArray?我认为问题出在 sort 命令上,因为它讨论了参数。 @JasonHocker,Swift 3 发展得如此之快,以至于 Swift 团队没有时间完善其诊断信息。当 Swift 找不到匹配的 sorted 重载并返回预期类型(在您的情况下为 NSArray?)时,它有时会输出这种不充分且令人困惑的消息。而且我认为这种糟糕的诊断应该被视为错误,您最好将错误报告发送给Apple或swift.org。【参考方案2】:

这里也是同样的问题。我试图从 Xcode beta 中的官方 Swift 3 指南中编译一个 sn-p 并得到同样的错误 - 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看来,sorted的API似乎从 x.sorted(isOrderedBefore: >) 到 x.sorted(by: >)。我想在未来的 Xcode beta 中,这会得到解决。

【讨论】:

另一种写法:var reversedNames = names.sorted(by: s1, s2 -> Bool in s1 > s2 )

以上是关于Xcode 8 beta 6 swift 3 本地化CaseInsensitiveCompare的主要内容,如果未能解决你的问题,请参考以下文章

swift 3(xCode8-beta6)上的可达性问题

Swift 3 / Xcode 8 beta 6 中未调用 UIApplicationShortcutItem 的 AppDelegate 函数

“无法将类型 'String' 的值分配给类型 'AnyObject?'”,Swift 3,Xcode 8 beta 6

Xcode 8 beta 6 AnyObject Swift 3 变化

Xcode6-Beta3 更新后,无法使用 Swift 访问键盘信息

使用 Alamofire Swift 3 和 Xcode 8 beta 解析 JSON 没有数据