连接&存储音乐符号 - Objective-C

时间:2013-02-15 17:47:46

标签: objective-c unicode

我正在将这些unicode定义用于尖锐和扁平的符号,它们在字符串连接中工作正常:

#define kSharpSymbol [NSString stringWithFormat:@"\U0000266F"]
#define kFlatSymbol [NSString stringWithFormat:@"\U0000266D"]

[...]
// Set F#
[f setNoteLetterName:[NSString stringWithFormat:@"F%@",kSharpSymbol]];

然后,我刚刚阅读SO question依赖于unicode格式化的Apple不建议我这样做,这也有效,但当我执行隐式字符串concat时会导致编译器警告:

格式指定类型'unsigned short'但参数的类型为'int'

#define kSharpSymbol [NSString stringWithFormat:@"%C", 0x266F]
#define kFlatSymbol [NSString stringWithFormat:@"%C", 0x266D]
[...]
// Set F#
[f setNoteLetterName:[NSString stringWithFormat:@"F%@",kSharpSymbol]];

我想我需要对此有所了解。什么是最好的,如何让编译器感到高兴?

1 个答案:

答案 0 :(得分:4)

我建议另一种方法来解决这个问题:使用直接包含Unicode符号的字符串常量绝对没有错,例如

#define kSharpSymbol @"♯"
#define kFlatSymbol  @"♭"

优点是程序的人类读者会看到符号,而不会在表格中查找。缺点是当在一些不支持现代文件编码的旧文本编辑器中查看时,程序看起来不正确。幸运的是,Xcode的编辑器不是其中之一,所以它不应该是一个问题。