Besiege den Aufwand, C-Arrays von Swift als Tupel zu behandeln

Aufgabe

Die Arbeit mit C-Arrays fester Länge ist etwas ärgerlich, wenn Sie die C-Bibliothek von Swift verwenden. Weil es in Swift als Tupel behandelt wird. Tupel ist nicht iterierbar, daher ist es schwierig, auf Elemente zu verweisen. Was soll man damit machen?

Korrespondenz

Methode 1: Niederlage mit Reflexion

So konvertieren Sie Tupel mit Reflexion in Array, wie unter https://qiita.com/codelynx/items/83f4b3829267d8d25b07 beschrieben. Es gibt kein Problem. Reflexion ist jedoch eine schwere Belastung für den Compiler, daher ist dies nicht die Methode, die Sie aggressiv verwenden möchten.

Methode 2: Mit einem Zeiger besiegen

var foo_list = func_with_c()
let ptr = UnsafeMutablePointer<Foo>(&foo_list.foo.0)

// "Feste Länge"Schreiben Sie die Größe von. Angenommen, Sie wissen, dass die Länge 34 beträgt.
for i in 0..<34 {
    let foo = ptr[i]
    print(foo)
}

Ich bin nicht glücklich, var zu verwenden, aber es ist compilerfreundlich, weil es keine Reflexionen macht. Ich frage mich, ob ich oft so schreibe, es sei denn, es gibt einen bestimmten Grund.

Referenz: Swift Foundation UUID-Implementierung

Recommended Posts

Besiege den Aufwand, C-Arrays von Swift als Tupel zu behandeln
Finden Sie mit Swift eine Annäherung an log (1 + x)
Ich habe [Klonmethode für Java-Arrays] als Klonmethode in Java-Arrays übersetzt.
Implementieren Sie dieselbe Funktion wie das C, C ++ - System ("cls") in Java
[Swift5] So erhalten Sie ein Array und eine Reihe von Unterschieden zwischen Arrays
Behandle C char ** gut mit Swift
Reihenfolge der Verarbeitung im Programm