首页 > 解决方案 > Xcode:swift Int 和 Objective-C int 之间的不同行为

问题描述

我正在尝试将Swift函数转换为Objective-C. 这是函数的签名

迅速:

func hammingWeight(_ n: Int) -> Int

Objective-C

-(int) hammingWeight:(int) number

我将此值传递给函数/方法:

00000000000000000000000000001011

在 Swift 的情况下,如果我打印 n 的值,它会打印:

p n
(Int) $R2 = 1011

在 Objective-C 打印的情况下:

p number
(int) $0 = 521

我对你们的问题是为什么 Objective-C 正在改变我通过的价值。对我来说完全是无稽之谈。你们中的任何人都知道为什么会发生这种情况,或者是否有办法解决这个问题?

非常感谢您对此提供的帮助。

这是完整的 Objective-C 实现:

@interface DoSomething : NSObject
@end

@implementation DoSomething

-(int) hammingWeight:(int) number {
    NSLog(@"number %d", number);
}

@end

int main(int argc, char *argv[]) {
    @autoreleasepool {
        DoSomething *doIt = [DoSomething new];
        [doIt hammingWeight:00000000000000000000000000001011];
    }
}

标签: iosobjective-cswiftiphonexcode11.4

解决方案


不同之处在于,在 (Objective-)c 中,由于前缀的原因,您给定的数字被解释为八进制0,而在 Swift 中,它被解释为十进制。

对于 Swift prefix 中的八进制 Int 文字0o

Swift 文档中有关八进制 Int 文字的信息c 文档
中有关八进制整数的信息

// Swift:
(lldb) po 0o0000000000000000000000000001011;
521

(lldb) po 00000000000000000000000000001011;
1011

// Objective-C
(lldb) po 1011
1011

(lldb) po 01011
521

推荐阅读