当从 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/