gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:48:30 26 4
gpt4 key购买 nike

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

在某些情况下我能猜出它代表什么,在其他情况下我不能。

示例:

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

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

第 3 类型代表什么?我必须查看代码的 Objective-C 版本才能知道这些是 returnedItems

为什么没有那样实现:(注意 activityItems 标签)

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

编辑:- 这只是一个临时状态吗(因为 Swift 还没有完全集成到这些框架中)?如果没有参数标签,代码的可读性会降低。

最佳答案

问题是这是一个由机器生成的函数签名类型别名,而机器并没有按照您的意愿去做。考虑以下 Objective-C 声明:

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

Swift 生成的接口(interface)是:

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

如您所见,name 被删除了;它无处可寻。

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

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

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

关于ios - 为什么 Apple 的闭包声明缺少参数标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com