注释的NSArray *在Objective-C,使其桥接阵列
问题描述:
是否有标注NSNumber
的NSArray
的方式:在Objective-C注释的NSArray <NSNumber *> *在Objective-C,使其桥接阵列<Int>
@property (nonatomic) NSArray<NSNumber *> *myProperty
,因此,将在斯威夫特进口作为
var myProperty: [Int]
代替var myProperty: [NSNumber]
?
我知道NS_SWIFT_NAME
,但不允许更改类型。
答
不幸的是,从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
你能解释清楚的类型明显
[Int]
类型?你需要一个快捷的'Int'数组或'NSNumber'数组吗?或者也许Objective c中的一个'Int'数组? – trungduc一个'Int'阵列中夫特从'的NSArray *'在Objective-C。 –
Trenskow
提问后,我再研究一下。我不认为这是可能的。如果你看一下'UIGestureRecognizer'的'allowedTouchTypes'属性。一个也是'的NSArray *'返回类型,而在夫特导入为'[NSNumber的]'。 –
Trenskow