小编刘ma*_*ell的帖子

NSLocalizedString 从 Swift 传递到 Objective-C 时可能存在 iOS 16 错误

我遇到了我认为是 iOS16 中的一个错误:当本地化字符串从 Swift 传递到 Objective-C 并与另一个相同的本地化字符串(在 Objective-CC 中定义)进行比较时,结果可能为 false 并且参数顺序可以影响结果。看演示:

\n
class ViewController: UIViewController {\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        let tc = TestClass()\n        tc.receive(NSLocalizedString("Start", comment:""))\n    }\n}\n
Run 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\n
Run Code Online (Sandbox Code Playgroud)\n

它是可本地化的(以日语为例,但拉丁语以外的任何书写系统都可以重现该错误):

\n
"Start" = "\xe9\x96\x8b\xe5\xa7\x8b";\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
result: 0, 1\n
Run Code Online (Sandbox Code Playgroud)\n

我们不知道造成这种情况的根本原因是来自NSLocalizedString()还是-isEqualToString。iOS15 上不会发生这种情况。

\n

还有其他人遇到过这个错误吗?

\n

objective-c nslocalizedstring swift ios16

6
推荐指数
1
解决办法
473
查看次数

标签 统计

ios16 ×1

nslocalizedstring ×1

objective-c ×1

swift ×1