5

我在Objective-C中編寫了一組工具,Swift在某些時候會使用這些工具,所以我使用泛型和可空性。在這種情況下我該怎麼做?NSError,Swift和nullability

- (NSArray<MyObj *> * __nullable)foo:(NSError **)error; 

目前我得到一個警告:Pointer is missing a nullability type specifier...兩個三分球!我幾乎可以肯定,我不應該這樣做:

- (NSArray<MyObj *> * __nullable)foo:(NSError * __autoreleasing __nullable * __nullable)error; 

我是嗎?

回答

18

的夫特博客條目Nullability and Objective-C狀態:

具體類型NSError **人們常常用於經由它總是假設爲一個可爲空指針 爲可空NSError參考 方法參數,以返回錯誤。

然而,這句話被列爲例外規則「經審覈區」的 ,並且它似乎只適用於內 被審計地區:

NS_ASSUME_NONNULL_BEGIN 

@interface MyClass : NSObject 
- (NSArray<MyObj *> * _Nullable)foo:(NSError **)error; 
@end 

NS_ASSUME_NONNULL_END 

在經審計的區域,任何簡單的指針類型將被假定爲nonnull(除了上述NSError的一些例外)。

之外的審計區域的,你確實有明確

- (NSArray<MyObj *> * _Nullable)foo:(NSError * _Nullable * _Nullable)error; 

寫,以避免錯過空性類型說明符的警告。

_Nullable是Xcode 7中使用的較新語法,取代__nullable。)