[英]Read NSArray of CGPoints in Swift
我在Objective-C类中有一个返回NSArray的函数:
- (NSArray *) myAwesomeFunction {
// Good stuff here
return array
}
现在我知道该数组的成员都是内部带有CGPoint
NSValue
对象。 但是,该信息不适用于Swift,它(正确地)将返回类型推断为[AnyObject]!
现在,当我尝试将数组的成员NSValue
转换为NSValue
,我应该得到一个NSValue
转换错误。
let myArray = AnObjectiveCClass.myAwesomeFunction()
let myValue = myArray[0] as NSValue // Cast error since AnyObject cannot be cast to NSValue
但是,这给我带来了一个问题,如何在我的Swift类中访问数组的内容? 最后,我想在数组内部检索CGPoint值。
我认为,您可以将整个数组转换为[NSValue]
数组:
if let downcastNSValueArray = myArray as? [NSValue] {
let myValue = downcastNSValueArray[0]
}
您可以简单地在方法中添加一个Objective-C 泛型注释 :
+ (NSArray<NSValue *> *) myAwesomeMethod {
// Good stuff here
return array;
}
现在,Swift自动推断类型:
let myArray = MyClass.myAwesomeMethod()
let myValue = myArray[0]
let myPoint = myValue.pointValue
请注意, myArray
将是一个隐式展开的可选值,即[NSValue]!
,因此,如果您知道myAwesomeMethod
永远不会返回nil
则也可以添加可空性注释 。 myValue
将被视为非可选。 因此,上面的代码不需要任何其他类型的处理即可满足编译器的要求,但如果myArray == nil
或myArray.count < 1
,则仍可能触发运行时异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.