繁体   English   中英

在Swift中读取CGPoints的NSArray

[英]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 == nilmyArray.count < 1 ,则仍可能触发运行时异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM