首页 > 解决方案 > EXC_BAD_ACCESS 代码=1 当通过 Swift 代码设置目标 C 块时

问题描述

我有混合应用程序(使用 Objective C 代码的 Swift 应用程序) 在 Swift 代码中,我设置了一个块数组并在 ObjC 代码中运行这些块。但是应该运行该块时有一个 EXC_BAD_ACCESS 代码=1。

当我在 ObjC 代码中设置块数组时,一切正常。

知道为什么 Swift 对运行数组中的块如此不满意吗?

标签: objective-cswiftclosuresobjective-c-blocks

解决方案


我找到了解决方案。我的块数组是一个属性。是这样的:

//Class.h - before fix

typedef BOOL (^TextReplacementDecisionBlock)(NSString *, NSRange, NSString *);

@property (nonatomic, strong) NSArray *decisionBlocks; // led to EXC_BAD_ACCESS

对 Obj C 来说还可以,但对 Swift 来说还不够。Swift 需要更具体的块来正确地将其转换为闭包。像这样:

//Class.h - after fix

typedef BOOL (^TextReplacementDecisionBlock)(NSString *, NSRange, NSString *);

@property (nonatomic, strong) NSArray<TextReplacementDecisionBlock> *decisionBlocks;

推荐阅读