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
,而不是 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;
或者在块字面量中明确指定return类型:
^NSInteger(ActionSheetPicker *picker) {
return 29;
};
当从armv7s 切换到arm64 时,无法编译自定义块。我怎样才能解决这个问题?谢谢。 这是我的代码:
//typedef NSInteger (^ActionSheetPickerNumberOfRowsBlock)
(ActionSheetPicker *picker);
ActionSheetPickerNumberOfRowsBlock numberOfRows = ^(ActionSheetPicker *picker) {
return 29;
};
29
默认类型为 int
,因此编译器会根据需要为块推断 return 类型 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;
或者在块字面量中明确指定return类型:
^NSInteger(ActionSheetPicker *picker) {
return 29;
};