我编写了一个 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 值?
最佳答案
您需要通过调用 numberWithInt
将 NSNumber
unbox 成原始 int
,所以在您的情况下将是 [h.returnTotalRouteX[0] intValue]
。当您使用 %@
模式登录时它起作用的原因是因为它正在调用它的字符串格式化程序。
在 OOP 中,装箱 是原始类型在引用类型中的存储。 拆箱是相反的过程。
某些语言(例如 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];
关于objective-c - OC 调用一个返回 int 数组的 swift 函数,但不能接受其带有 int 变量的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043064/