objective-c - EXC_BAD_ACCESS 代码=1 当通过 Swift 代码设置目标 C 块时
问题描述
我有混合应用程序(使用 Objective C 代码的 Swift 应用程序) 在 Swift 代码中,我设置了一个块数组并在 ObjC 代码中运行这些块。但是应该运行该块时有一个 EXC_BAD_ACCESS 代码=1。
当我在 ObjC 代码中设置块数组时,一切正常。
知道为什么 Swift 对运行数组中的块如此不满意吗?
解决方案
我找到了解决方案。我的块数组是一个属性。是这样的:
//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;
推荐阅读
- apache-spark-ml - 如何将具有多个输入列的 Spark ML 模型转换为 ONNX 并将其用于对动态批量大小进行评分?
- r - 打破 x 轴
- function - 在 MATLAB 中使用 Simulink 模块
- reactjs - React useState 没有更新 Array.map 函数中的值
- python - c++ 中是否有类似 python 中的 subprocess.Popen() 的功能?
- reactjs - Why is my component rendered twice in react.js 16.x?
- python - 在 Python 中删除回车的问题
- c++ - 关于类的一些问题
- php - 来自 Sql Server 数据库的 Woocommerce 提要产品
- mysql - 乘以函数mysql