Objective-C 中的闭包(Swift)到闭包(块?

Closures(Swift) to closures(blocks?) in Objective-C

提问人:Aviav Sabag 提问时间:1/19/2021 更新时间:1/19/2021 访问量:1118

问:

嗨,大家好,我是 Objective-C 的新手,我有一个小代码,我想把它从 Swift -> Objective-C 转换过来。我有一个变量,它是一个闭包,但不确定如何在 Objective-C 中做到这一点 变量如下:

var didTimerFire: ((UICollectionViewCell) -> Void)?

目标C中还有“自我”吗?很抱歉我是个菜鸟,但对 Objective-C 来说又有点陌生:)

iOS 闭包 Objective-C-块

评论

1赞 zeytin 1/19/2021
您还可以查看我的答案,比较闭包和块语法 stackoverflow.com/a/64615010/14531220

答:

2赞 Grzegorz Krukowski 1/19/2021 #1

在 Objective-C 中,有:Blocks

如果你想把它们用作属性,它就像:

@property (nonatomic, copy, nullability) returnType (^blockName)(parameterTypes);

或作为方法参数:

- (void)method:(returnType (^nullability)(parameterTypes))blockName;

因此,对于您的示例,它将是这样的:

@property (nonatomic, copy, nullable) void (^didTimerFire)(UICollectionViewCell);

评论

0赞 Aviav Sabag 1/19/2021
知道你:)顺便说一句,Objective-C 中是否有像 Swift 那样的“自我”?:)
4赞 Duncan C 1/19/2021
我写了很多 Objective-C,但我从来没有记住过可怕的块语法。指定属性、方法参数和块类型的方式各不相同且不直观。我收藏了一个链接,叫做 fuckingblocksyntax.com。我建议参考这一点。
0赞 Aviav Sabag 1/19/2021
@Grzegorz Krukowski 顺便说一句,如何在 objective-c 中这样使用它:cell.didTimerFire = { [弱自我] 守卫中的单元格 let self = self else { return } self.impressionEventStalker?。stalkCells() } 类似完成处理程序
0赞 Duncan C 1/19/2021
我似乎记得有一个 G 级版本的页面,内容完全相同。鉴于它的名字不合时宜,我犹豫是否要链接它,但它确实抓住了我(和其他人,显然)对 Objective-C 块语法的感受。