2016-09-15 35 views
2

我使用用Objective-C庫,其具有被組織成一個結構,並且包括一個字節數組的屬性之間的字節數組的類型的對話常量值64Objective-C和夫特

我橋接圖書館我迅速的項目,其工作正常,到目前爲止,但我想知道有關物業RFIDTag.ID這是

byteID (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8)在迅速的返回類型。每個字節值都可以通過屬性RFIDTag.ID.0,RFIDTag.ID.1等等來訪問

但是我想將整個ID存儲在一個數組中而不需要手動複製每一個值。

在此,我無法將ID屬性分配給根據var array = [UInt8](count:64, repeatedValue:0)或類似方法初始化的快速數組。

有沒有人有一個想法如何解決這個問題?

提前感謝和問候

馬爾科

回答

2

您可以通過從緩衝區指針構建它這些值複製到一個數組。例如:

let array: [UInt8] = withUnsafePointer(&byteID) { bytePtr in 
    let buffer = UnsafeBufferPointer(start: UnsafePointer<UInt8>(bytePtr), count: 64) 
    return Array(buffer) 
} 

這產生一個指向元組,將其轉換爲一個指向UINT8,即轉換到緩衝器,然後使用緩衝器來初始化數組。請注意,byteID必須是var,而不是let的值,以便您可以使用&就可以了。這可能會強制你創建兩個元組的副本。 (我很確定還有另一種技術可以避免額外的副本,但在這種情況下可能不是什麼大問題。)