注释的NSArray *在Objective-C,使其桥接阵列

注释的NSArray <NSNumber *> *在Objective-C,使其桥接阵列<Int>

问题描述:

是否有标注NSNumberNSArray的方式:在Objective-C注释的NSArray <NSNumber *> *在Objective-C,使其桥接阵列<Int>

@property (nonatomic) NSArray<NSNumber *> *myProperty 

,因此,将在斯威夫特进口作为

var myProperty: [Int]代替var myProperty: [NSNumber]

我知道NS_SWIFT_NAME,但不允许更改类型

+0

你能解释清楚的类型明显[Int]类型?你需要一个快捷的'Int'数组或'NSNumber'数组吗?或者也许Objective c中的一个'Int'数组? – trungduc

+0

一个'Int'阵列中夫特从'的NSArray *'在Objective-C。 – Trenskow

+0

提问后,我再研究一下。我不认为这是可能的。如果你看一下'UIGestureRecognizer'的'allowedTouchTypes'属性。一个也是'的NSArray *'返回类型,而在夫特导入为'[NSNumber的]'。 – Trenskow

不幸的是,从Objective-C的导入符号时,你不能改变的静态类型。

但是,您可以指定Swift Int阵列而不进行任何类型转换(假设foo是ObjC类的实例)。但是类型不会改变。

foo.myProperty = [1, 2, 3, 4, 5] 
print(type(of: foo.myProperty)) // Optional<Array<NSNumber>> 

在另一方面,让你不得不施放

let mySwiftProperty = foo.myProperty as! [Int] 
print(type(of: mySwiftProperty)) // Array<Int> 
+0

我接受这是正确的答案。在做了最初的问题之后,我做了一些研究,甚至UIKit都这么做,所以我想这是不可能的。我只是不想让我的用户有责任将其转换为正确的类型。谢谢! – Trenskow