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?
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.
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