Über die Angelegenheit, dass der Code zum Lesen des C-Strukturelements (Char-Array), das in Swift 2.3 in Swift 3 funktionierte, nicht funktionierte

Beim Betrieb einer C-Struktur wie der folgenden von Swift via Bridge

cstruct.h


 #define MEM01_SIZE 255
 struct cstruct {
    char cstr01[MEM01_SIZE];
  } 

In swift2 wurde es mit dem folgenden Code erstellt, in swift3 war es jedoch ein Compilerfehler.

swift:swift2.2.swift


var size: Int32 = 0
var cstruct = GetCStruct(&size)
let cstr01_str = withUnsafePointer(&cstruct.memory.cstr01)
{
 return String.fromCString(UnsafePointer($0))!
}

In swift3 ging ich wie folgt vor.

swift3.swift


var cstr01_str_tuple = cstruct?.pointee.cstr01
let cstr01_str = withUnsafePointer(to: &cstr01_str_tuple)
{
  return String(cString: UnsafeRawPointer($0).assumingMemoryBound(to: CChar.self))
}

Ich bin mir nicht sicher, warum es funktioniert, daher kann ich noch keinen Kommentar schreiben, aber es hat vorerst funktioniert. Machen Sie sich also eine Notiz.

Recommended Posts

Über die Angelegenheit, dass der Code zum Lesen des C-Strukturelements (Char-Array), das in Swift 2.3 in Swift 3 funktionierte, nicht funktionierte
[Swift] Eine einfache Art, Entlassung zu beschreiben, die im Einführungsbuch nicht gelehrt wurde
Zu der Sache, dass: n-tes Kind (-n + m) im Selektor von jsoup nicht wie beabsichtigt funktioniert
Über die Sache, dass ich süchtig danach war, wie man Hashmap benutzt
Warum war das Lesen des Codes schmerzhaft?