【问题标题】:EXC_BAD_ACCESS code=1 when setting objective C block by Swift codeEXC_BAD_ACCESS 代码=1 当通过 Swift 代码设置目标 C 块时
【发布时间】:2019-08-07 13:52:36
【问题描述】:
我有混合应用程序(使用 Objective C 代码的 Swift 应用程序)
在 Swift 代码中,我设置了一个块数组并在 ObjC 代码中运行这些块。但是应该运行该块时有一个 EXC_BAD_ACCESS 代码=1。
当我在 ObjC 代码中设置块数组时,一切正常。
知道为什么 Swift 对运行数组中的块如此不满意吗?
【问题讨论】:
标签:
objective-c
swift
closures
objective-c-blocks
【解决方案1】:
我找到了解决方案。我的块数组是一个属性。是这样的:
//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;