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 / Xcode 8 beta 6 中未调用 UIApplicationShortcutItem 的 AppDelegate 函数
“无法将类型 'String' 的值分配给类型 'AnyObject?'”,Swift 3,Xcode 8 beta 6
Xcode 8 beta 6 AnyObject Swift 3 变化