【发布时间】:2018-03-15 15:15:38
【问题描述】:
我目前正在尝试将一些 Swift 2 代码移植到 Swift 3.0。
这里有一行代码让我抓狂。
public private(set) var searchHistory: [SearchHistoryEntry] = [SearchHistoryEntry]() // Struct that is cComparable
....
...
searchHistory.sortInPlace({ $0.lastUsage.isAfter($1.lastUsage) })
这是我的 Swift 3.0 版本
searchHistory.sort(by:{ $0.lastUsage.isAfter($1.lastUsage) })
lastUsage 的类型为 Date
编译器抱怨以下错误消息
参数传递给不带参数的调用
任何想法我做错了什么? 我真的不明白编译器想要告诉什么。 排序需要一个块,我通过它,一切都应该没问题。
更新
我发现了错误。 Swift 将所有 NSDate 属性转换为 Date,我们在 NSDate 上得到了一个名为 isAfter 的扩展。所以编译器再也找不到 isAfter 了。编译器错误消息完全具有误导性。
【问题讨论】:
-
searchHistory和lastUsage有哪些类型?您能否为您的代码行提供更多上下文? -
对不起,我可以做到。
-
我得到了那个错误.. Swift 将所有 NSDate 属性转换为 Date。我们在 NSDate 上得到了一个名为 isAfter 的扩展。所以编译器再也找不到 isAfter 了。编译器错误消息完全具有误导性。
-
这不是 swift 编译器第一次给出神秘的错误信息 :)
-
不过,谢谢;)