ios自定义 block 无法为arm64编译

标签 ios compilation block arm64

当从 armv7s 更改为 arm64 时,我无法编译自定义 block 。我怎样才能解决这个问题?谢谢。 这是我的代码:

//typedef NSInteger (^ActionSheetPickerNumberOfRowsBlock)

(ActionSheetPicker *picker);
    ActionSheetPickerNumberOfRowsBlock numberOfRows = ^(ActionSheetPicker *picker) {
        return 29;
    };

最佳答案

29 默认类型为 int,因此编译器推断 block 的返回类型为 int,而不是 NSInteger 根据需要。 NSInteger 与armv7 中的int 相同,但不是arm64。

this table可以看出:

  • int 在 armv7 和 arm64 中都是 32 位的
  • NSInteger 在 armv7 中是 32 位的,在 arm64 中是 64 位的
  • long 在 armv7 中是 32 位,在 arm64 中是 64 位(与 NSInteger 相同)

所以你可以这样做:

return 29l;

return (NSInteger)29;

或者在 block 字面量中显式指定返回类型:

^NSInteger(ActionSheetPicker *picker) {
    return 29;
};

关于ios自定义 block 无法为arm64编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28262781/

相关文章:

c - 如何查看管道是否为空

iphone - 使用 block 替换委托(delegate)来传递值

ios - 使用圆形按钮创建关卡选择屏幕

ios - React Native Webview NSURLErrorDomain 1022

编译C问题 "no such directory"

c++ - 如何在外部服务器上构建我的本地 git 仓库?

linux - 前置视觉 block 在 vim 中不起作用

iphone - 从 Nib 问题加载自定义单元格

objective-c - NSMetaDataQuery 从不使用 NSMetadataQueryDidFinishGatheringNotification 回调

python - 在线编辑Python脚本?