在我的 iOS 应用程序中,我想定义两个将彼此作为参数的块类型:
typedef void (^BlockA)(BlockB b);
typedef void (^BlockB)(BlockA a);
在第一个 typedef 中使用“未知类型名称 BlockB”编译失败(这是有道理的)。
我有一个解决方法,它定义了这样的类型:
typedef void (^BlockA)(id);
typedef void (^BlockB)(BlockA a);
然后我在 BlockA 定义中转换回 BlockB 类型,但以牺牲类型安全为代价。
我还研究了不使用 typedef,但这会导致扩展块定义的无限嵌套。
我知道如何解决具有前向声明的结构的循环依赖关系,但我看不到如何使用块来做到这一点。
如果没有解决循环依赖的方法,有没有办法可以将 BlockA 的参数限制为任何 Block 类型而不是 generic id
,这将提供一定程度的类型安全。