Objective-C语言语法 - “类型检查”常量字符串

时间:2013-05-19 15:40:14

标签: objective-c nsstring

Cocoa和CocoaTouch经常使用字符串常量,我想知道是否存在强制(鼓励?)一组特定字符串作为方法参数的语法。

例如,NSPersistentStoreCoordinator的方法-addPersistentStoreWithType:configuration:URL:options:error:会为第一个参数选择四个可能的字符串之一。

这些字符串在NSPersistentStoreCoordinator.h中声明为

COREDATA_EXTERN NSString * const NSSQLiteStoreType NS_AVAILABLE(10_4, 3_0);
COREDATA_EXTERN NSString * const NSXMLStoreType NS_AVAILABLE(10_4, NA);
COREDATA_EXTERN NSString * const NSBinaryStoreType NS_AVAILABLE(10_4, 3_0);
COREDATA_EXTERN NSString * const NSInMemoryStoreType NS_AVAILABLE(10_4, 3_0);

(FWIW,COREDATA_EXTERN宏扩展为extern以及其他平台的一些好东西)

在方法中超越(参数)断言,有没有办法确保Xcode / clang / LLVM只鼓励这四个值?

1 个答案:

答案 0 :(得分:1)

简短回答:不。该方法接受一个指针,所以你基本上可以扔任何东西,如果指针是正确的类型(在这种情况下是id或NSString),Clang会很乐意允许它。如果您有自己的代码,您希望告诉用户该方法只接受某些值,请在文档中明确说明并抛出描述性异常。