我正在使用Apple的ScriptingBridge框架,并为iTunes生成了一个包含以下几个enum的头文件:
typedef enum {
iTunesESrcLibrary = 'kLib',
iTunesESrcIPod = 'kPod',
iTunesESrcAudioCD = 'kACD',
iTunesESrcMP3CD = 'kMCD',
iTunesESrcDevice = 'kDev',
iTunesESrcRadioTuner = 'kTun',
iTunesESrcSharedLibrary = 'kShd',
iTunesESrcUnknown = 'kUnk'
} iTunesESrc;
Run Code Online (Sandbox Code Playgroud)
我的理解是,enum值必须是整数,但这个定义似乎违反了这个规则.此外,似乎将这些enum值视为整数(NSPredicate例如,在一个中)并不是正确的事情.
我将enum上面的声明添加到一个带有空main函数的C文件中,并使用它编译i686-apple-darwin9-gcc-4.0.1.因此,虽然这些类型的enums可能不符合C标准(正如Parappa在下面指出的那样),但它们至少被gcc 编译成某种类型.
那么,那种类型是什么,以及如何在格式字符串中使用它?
Apple的字符串格式说明符记录了声明,
NSString格式化方法和CFString格式化函数支持的格式说明符遵循IEEE printf规范 ; ...您也可以将这些格式说明符与NSLog函数一起使用.
但是,尽管printf规范定义%C作为等同于%lc和%S作为等同于%ls只%C和%S看起来与正常工作NSLog和+[NSString stringWithFormat:].
例如,请考虑以下代码:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
unichar str[3];
str[0] = 63743;
str[1] = 33;
str[2] = (unichar)NULL;
NSLog(@"NSLog");
NSLog(@"%%S: %S", str);
NSLog(@"%%ls: %ls", str);
NSLog(@"%%C: %C", str[0]);
NSLog(@"%%lc: %lc", str[0]);
NSLog(@"\n");
NSLog(@"+[NSString stringWithFormat:]");
NSLog(@"%%S: %@", [NSString stringWithFormat:@"%S", str]);
NSLog(@"%%ls: …Run Code Online (Sandbox Code Playgroud) 通常,我发现自己想要为访问HTTP资源的一部分代码编写单元测试,作为其正常功能的一部分.你有没有找到任何好的方法来编写这些类型的测试?