为什么Apple的闭包声明缺少参数标签

雅库布·特鲁拉(JakubTruhlář)

在阅读时UIKit,大多数时候,我会看到闭包(作为函数参数)缺少像这样的参数标签:func fooClosure(fooClosure: (Bool) -> Swift.Void)

在某些情况下,我可以猜测它代表什么,而在另一些情况下,我则无法。

例子:

看一下UIActivityViewController的闭包之一(作为类型别名):

public typealias UIActivityViewControllerCompletionWithItemsHandler = (UIActivityType?, Bool, [Any]?, Error?) -> Swift.Void

什么是第三类型代表什么?我必须查看代码Objective-C版本才能知道它们是returnedItems

为什么未采用这种方式实施:(请注意activityItems标签)

public typealias UIActivityViewControllerCompletionWithItemsHandler = (UIActivityType?, Bool, _ activityItems: [Any]?, Error?) -> Swift.Void

编辑: -这仅仅是一个临时状态(因为Swift尚未完全集成在这些框架中)?没有参数标签,代码的可读性较差。

马特

问题在于这是机器生成的函数签名类型别名,并且机器没有按照您的意愿进行操作。考虑以下Objective-C声明:

typedef void (^MyCoolType)(NSString* __nullable name);

Swift生成的接口是:

public typealias MyCoolType = (String?) -> Swift.Void

如您所见,name被剥夺了;这无处可寻。

在Swift中,没有什么可以阻止使用内部标签定义函数签名类型别名。这是合法的:

public typealias MyCoolType = (_ name:String?) -> Void

但这并不是从Objective-C生成生成的接口的方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript-为什么此闭包不保存参数?

来自分类Dev

为什么不能修改内联方法的闭包参数?

来自分类Dev

JavaScript-为什么此闭包不保存参数?

来自分类Dev

为什么“ for .. in”允许闭包?

来自分类Dev

为什么“ for .. in”允许闭包?

来自分类Dev

为什么Clang在参数包错误中缺少默认参数?

来自分类Dev

为什么只在嵌套闭包链的第一个实例中声明变量?

来自分类Dev

PHP闭包:为什么绑定到静态类时匿名函数声明中的“静态”?

来自分类Dev

PHP闭包:为什么绑定到静态类时匿名函数声明中的“静态”?

来自分类Dev

闭包-为什么这行代码是这样的?

来自分类Dev

闭包-为什么这行代码是这样的?

来自分类Dev

为什么在Common Lisp中,闭包无法捕获封装函数的参数?

来自分类Dev

为什么闭包的可变引用参数没有超过函数调用的寿命?

来自分类Dev

为什么速记参数名称在此Swift闭包中不起作用?

来自分类Dev

为什么find闭包的参数需要两个&符?

来自分类Dev

为什么闭包的可变引用参数没有超过函数调用的寿命?

来自分类Dev

如何声明要用作函数参数的闭包

来自分类Dev

当没有闭包时,为什么编译器为委托添加一个额外的参数?

来自分类Dev

在为闭包特征(Fn)创建整体实现时,为什么会得到“类型参数不受限制”的信息?

来自分类Dev

尽管传递了不同的值,为什么这个函数参数在每次调用中都是相同的?(在循环中创建闭包)

来自分类Dev

为什么此defun闭包与defparameter闭包的行为不同?

来自分类Dev

闭包参数列表中的&:部分是什么?

来自分类Dev

为什么Python无法在闭包中增加变量?

来自分类Dev

与闭包混淆,为什么返回不正确的值

来自分类Dev

为什么F#闭包可序列化?

来自分类Dev

为什么要在代码中考虑使用JavaScript闭包?

来自分类Dev

Groovy:为什么闭包本身不能访问?

来自分类Dev

为什么这个javascript闭包无法正常运行?

来自分类Dev

为什么不能将变量移出闭包?

Related 相关文章

  1. 1

    JavaScript-为什么此闭包不保存参数?

  2. 2

    为什么不能修改内联方法的闭包参数?

  3. 3

    JavaScript-为什么此闭包不保存参数?

  4. 4

    为什么“ for .. in”允许闭包?

  5. 5

    为什么“ for .. in”允许闭包?

  6. 6

    为什么Clang在参数包错误中缺少默认参数?

  7. 7

    为什么只在嵌套闭包链的第一个实例中声明变量?

  8. 8

    PHP闭包:为什么绑定到静态类时匿名函数声明中的“静态”?

  9. 9

    PHP闭包:为什么绑定到静态类时匿名函数声明中的“静态”?

  10. 10

    闭包-为什么这行代码是这样的?

  11. 11

    闭包-为什么这行代码是这样的?

  12. 12

    为什么在Common Lisp中,闭包无法捕获封装函数的参数?

  13. 13

    为什么闭包的可变引用参数没有超过函数调用的寿命?

  14. 14

    为什么速记参数名称在此Swift闭包中不起作用?

  15. 15

    为什么find闭包的参数需要两个&符?

  16. 16

    为什么闭包的可变引用参数没有超过函数调用的寿命?

  17. 17

    如何声明要用作函数参数的闭包

  18. 18

    当没有闭包时,为什么编译器为委托添加一个额外的参数?

  19. 19

    在为闭包特征(Fn)创建整体实现时,为什么会得到“类型参数不受限制”的信息?

  20. 20

    尽管传递了不同的值,为什么这个函数参数在每次调用中都是相同的?(在循环中创建闭包)

  21. 21

    为什么此defun闭包与defparameter闭包的行为不同?

  22. 22

    闭包参数列表中的&:部分是什么?

  23. 23

    为什么Python无法在闭包中增加变量?

  24. 24

    与闭包混淆,为什么返回不正确的值

  25. 25

    为什么F#闭包可序列化?

  26. 26

    为什么要在代码中考虑使用JavaScript闭包?

  27. 27

    Groovy:为什么闭包本身不能访问?

  28. 28

    为什么这个javascript闭包无法正常运行?

  29. 29

    为什么不能将变量移出闭包?

热门标签

归档