因此,在声明闭包时,我们可以得到相当抽象的东西 . 例如,我们可以使用内联闭包进行排序,如:
var arr = sort(["a", "b", "c"], { $0 > $1 }) // Shows ["c", "b", "a"]
arr
然后可以将其简化为这样的运算符函数:
var arr = sort(["a", "b", "c"], >) // Shows ["c", "b", "a"]
arr
因为:
Swift的String类型将其大于运算符(>)的字符串特定实现定义为具有两个String类型参数的函数,并返回Bool类型的值 . 这与sort函数的第二个参数所需的函数类型完全匹配 . 因此,您可以简单地传入大于运算符,Swift将推断您要使用其特定于字符串的实现
但是,我似乎无法在该论证的上下文之外找到一种方法 . 当它作为参数传递时,'>'几乎就像与'String'相关联的函数的名称 . 通过这种方式,我认为应该可以在参数的上下文之外进行分配 . 例如,有什么方法可以做到这一点:
var inlineClosure: (String, String) -> Bool = { > }
// or
var inlineClosure: (String, String) -> Bool = >
这纯粹是实验性的,我只是好奇,如果可能的话 .
注意
这个问题不是关于如何以除运算符之外的任何方式分配内联闭包 . 我已经熟悉各种声明类型,包括速记参数和尾随闭包 . 我只是通过分配一个运营商来专门寻找一种方法 .
4 回答
你可以这样做:
这似乎是Xcode的一个错误 . 你可以让它工作 . 像你一样输入整行:
然后删除并重新键入运算符 . 出于某种原因,解析器可以理解您要执行的操作 .
像这样?
使用实际闭包分配
inlineClosure
:顺便说一下,有一个特殊的语法,一个方法有一个闭包作为最后一个参数:
方便的 .