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];
我写了一个 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];