2016-10-27 3 views
0

Ich muss die folgende API in einem Objective-C-Header in J2Objc aufrufen.Swift 2 bis 3 Konvertierung UnsafePointer <UInt8>

/** 
* Create a new array of a specified length, setting the elements to the values in buf. 
*/ 
class IOSByteArray: NSObject { 
... 
+ (instancetype)newArrayWithBytes:(const jbyte *)buf count:(NSUInteger)count; 
... 
} 

In swift 2 konnte ich folgendes tun:

func myFunc() -> IOSByteArray { 
     return IOSByteArray.newArray(withBytes: UnsafePointer<UInt8>(data.bytes), count: UInt(data.count)) 
} 

In swift 3, erhalte ich die Fehlermeldung:

"Cannot invoke initializer for type 'UnsafePointer<UInt8>' with an argument list of type '(Array<UInt8>)'" 

Ich kann nicht herausfinden, wie das Äquivalent Anruf tätigen in swift 3.
Ich bekomme, dass https://swift.org/migration-guide/se-0107-migrate.html#automatic-migration-cases bietet eine Erklärung des warum und wie. Aber es ist ein wenig zu gelehrt für mich.

Hilfe!

+0

Was die Art der Datenvariable ist nicht zu konvertieren zu bekommen verwenden verwenden sollten in myFunc()? –

+0

Daten sind ein NSData-Objekt. – Navi

+0

Bitte überprüfen Sie meine Antwort, Sie sollten Daten in Swift 3 anstelle von NSData –

Antwort

0

In Swift 3 Sie Data Klasse statt NSData

Mit Datenklasse können Sie withUnsafeBytes die Bytes zu UnsafePointer und wie diese

func myFunc() -> IOSByteArray { 
    return data.withUnsafeBytes({ (unsafeBytes: UnsafePointer<UInt8>) -> IOSByteArray in 
     return IOSByteArray.newArray(withBytes: unsafeBytes, count: UInt(data.count)) 
    } 
} 
+0

auch versucht haben. – Navi

+0

@Navi Haben Sie noch einen Fehler erhalten? Wenn ja, könntest du den Fehler in den Kommentar einfügen? –

+0

Danke! Das hat funktioniert! – Navi

Verwandte Themen