objective-c - OC 调用一个返回 int 数组的 swift 函数,但不能接受其带有 int 变量的元素

标签 objective-c swift nsarray

我编写了一个 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 值?

最佳答案

您需要通过调用 numberWithIntNSNumber 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/

相关文章:

objective-c - 在mac上学习openGL : GLUT or native windowing system?

objective-c - 从另一个类调用实例方法

swift - 为什么文本字段委托(delegate)不能以编程方式在文本字段上使用设置文本?

ios - NSArray索引超出范围

ios - 如何将 NSArray 转换为特定的字符串?

iphone - 如何删除已损坏的 UIButton 的灰色外观

objective-c - 自定义 UIControl 始终发送 nil UIEvent 对象

swift - 用户的纬度和经度不会传递给新的 View Controller

objective-c - Swift beta 5 中的 bridgeToObjectiveC 和 makeObjectsPerformSelector

objective-c - Objective-C 中的 NSMutableArray 到 NSArray