[英]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.