簡體   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