OC调用了一个swift函数,其中returns一个int数组,但是不能接受它的元素带有一个int变量

OC call one swift function which returns an int array, but can not accept its element with an int variable

我写了一个 swift 函数,其中 return 一个 int 数组并在 objective-c 中调用它。但我无法将 return 数组的元素分配给 int 变量。 (TotalRoute 是 swift 中的一个 int 数组)

这是classGetRoute

中的函数
func returnTotalRouteX()->[Int]{
    println("call returnTotalRouteX")
    var routeX = [Int]()
    for item in totalRoute{
        routeX.append(nodeData[item]!.xPosition)
    }
    println(totalRoute)
    println(routeX)
    return routeX
}

然后我在 objective-c

中调用这个
    GetRoute *h = [[GetRoute alloc] init];

if (h.returnTotalRouteX.count == 0) {
    NSLog(@"it is empty");
}
else{
    NSLog(@"%@",h.returnTotalRouteX);
    NSLog(@"%@",h.returnTotalRouteX[0]);
    NSLog(@"it is not empty");
}

我只能写NSLog(@"%@",h.returnTotalRouteX[0]);。如果我写 NSLog(@"%d",h.returnTotalRouteX[0]);或者我将 h.returnTotalRouteX[0] 分配给一个 int 变量,答案不是我想要的。我怎样才能得到 int 值?

您需要通过调用 numberWithInt 拆箱 NSNumber 转换为原语 int,因此在您的情况下 [h.returnTotalRouteX[0] intValue]。当您使用 %@ 模式登录时它起作用的原因是因为它正在调用其字符串格式化程序。

在OOP中,装箱是原始类型在引用类型中的存储。 拆箱是相反的过程。

某些语言(例如 C#)按照约定自动提供装箱 and/or 拆箱功能。所以以下在 C# 中完全没问题:

int unBoxed = 420;
Object boxed = unBoxed;
int unUnBoxed = (int)unBoxed;

但是,Objective-C 不会为您执行此操作。所以 Objective-C 中的相同内容如下所示:

int unBoxed = 420;
NSNumber *boxed = [NSNumber numberWithInt:unBoxed];
int unUnBoxed = [boxed intValue];