【发布时间】:2017-03-10 22:06:31
【问题描述】:
在 Swift 3 中,我可以在尾随闭包中使用特定于字符串的实现吗?
let names = ["Ekram","Galib","Hasan","Rangon","Asif","Saikat"]
let reversedName = names.sorted{ > }
【问题讨论】:
在 Swift 3 中,我可以在尾随闭包中使用特定于字符串的实现吗?
let names = ["Ekram","Galib","Hasan","Rangon","Asif","Saikat"]
let reversedName = names.sorted{ > }
【问题讨论】:
为什么将> 包裹在尾随闭包中? sorted(by:) 接受一个函数,> 已经匹配它的签名。所以就这样做吧:
let reversedName = names.sorted(by: >)
只是陈述一些不明显的事情:
a) Swift 中的操作符像常规函数一样工作,例如在这种情况下,就像func > <T>(lhs: T, rhs: T) -> Bool
b) 在 Swift 中,函数被命名为闭包,如果 API 需要闭包(如 (lhs: T, rhs: T) -> Bool),您也可以使用命名函数,如 > 或 func compareTheTwo(a: String, b: String) -> Bool
【讨论】:
functions are named closures IN SWIFT ;-)
strcmp 或不捕获的 Swift 全局函数),您的陈述也不完全正确。我认为适当的声明更像是:声明一个回调入口点的 Swift 函数,如 ( String, String ) -> Void 接受所有、闭包、方法或函数。不过,所有这些都与原始问题无关。
是的,但您必须指定实际比较的参数:
let reversedNames = names.sorted { $0 > $1 }
【讨论】:
names.sorted(by: >)