2013-05-19 56 views
1

Cocoa和CocoaTouch经常使用字符串常量,我想知道是否有语法强制(鼓励?)一组特定的字符串作为方法的参数。Objective-C语言语法 - “类型检查”常量字符串

例如,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

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

+0

该死的,这是一个无赖。我已经编写了一个代码,它将一个新的“现代”枚举映射到一个静态的字符串数组中,它给了Xcode完成的帮助,但是从长远来看它提供了很少的回报(仍然需要声明一个特定的范围被传入)。谢谢! – edelaney05