ios 自定义块无法为 arm64 编译

ios custom block can not compile for arm64

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

//typedef NSInteger (^ActionSheetPickerNumberOfRowsBlock)

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

29 默认类型为 int,因此编译器会根据需要为块推断 return 类型 int,而不是 NSIntegerNSInteger在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;

或者在块字面量中明确指定return类型:

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