我遇到了我认为是 iOS16 中的一个错误:当本地化字符串从 Swift 传递到 Objective-C 并与另一个相同的本地化字符串(在 Objective-CC 中定义)进行比较时,结果可能为 false 并且参数顺序可以影响结果。看演示:
\nclass ViewController: UIViewController {\n override func viewDidLoad() {\n super.viewDidLoad()\n let tc = TestClass()\n tc.receive(NSLocalizedString("Start", comment:""))\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n@implementation TestClass\n- (void)receive:(NSString *)swiftString {\n NSString *objcString = NSLocalizedString(@"Start", @"");\n BOOL result1 = [swiftString isEqualToString:objcString];\n BOOL result2 = [objcString isEqualToString:swiftString];\n NSLog(@"result: %d, %d", result1, result2);\n}\n@end\nRun Code Online (Sandbox Code Playgroud)\n它是可本地化的(以日语为例,但拉丁语以外的任何书写系统都可以重现该错误):
\n"Start" = "\xe9\x96\x8b\xe5\xa7\x8b";\nRun Code Online (Sandbox Code Playgroud)\n输出:
\nresult: 0, 1\nRun Code Online (Sandbox Code Playgroud)\n我们不知道造成这种情况的根本原因是来自NSLocalizedString()还是-isEqualToString。iOS15 上不会发生这种情况。
还有其他人遇到过这个错误吗?
\n