我编写了一个swift函数,它返回一个int数组并在objective-c中调用它。但是我不能将返回数组的元素赋给int变量。 (TotalRoute是swift中的int数组)
这是GetRoute类中的函数
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值?
答案 0 :(得分:0)
您需要通过调用NSNumber
取消将int
转换为原始numberWithInt
,因此在您的情况下将是[h.returnTotalRouteX[0] intValue]
。使用%@
模式登录时它起作用的原因是因为它正在调用其字符串格式化程序。
在OOP中, boxing 是在引用类型中存储基本类型。 取消装箱是相反的过程。
某些语言(例如C#)按惯例自动提供装箱和/或拆箱功能。所以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];