【问题标题】:Xcode 8 beta 6 swift 3 localizedCaseInsensitiveCompareXcode 8 beta 6 swift 3 本地化CaseInsensitiveCompare
【发布时间】: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:
  • 我已经用更多上下文更新了上面的代码

标签: xcode swift3 xcode8-beta6


【解决方案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 })
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2016-10-20
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多