Sowohl C als auch Swift Favorit Hallo allerseits. Lassen Sie uns in diesem Artikel überlegen, wie Sie mit char **
in Swift gut umgehen können.
Wie die Pioniere betonten, kann gesagt werden, dass die gegenseitige Konvertierung zwischen Swifts "String" -Typ und Cs "char *" -Typ vorhanden ist.
Wenn Sie mit "String # withCString" und "String # fromCString" vertraut sind, sollten Sie in der Lage sein, C-Systemaufrufbibliotheksaufrufe von Swift bequem zu verwenden.
Übrigens verwenden einige Aufrufe der C-Systemaufrufbibliothek "char **" als Argument, das auch von Swift verwendet werden kann. Zum Beispiel ist der Typ des fünften Arguments "argv" von Swifts "posix_spawn" wie folgt.
UnsafePointer<UnsafeMutablePointer<Int8>>>
Dies entspricht "char * const *" in C, aber ich glaube nicht, dass viel darüber diskutiert wird, was zu tun ist, wenn Sie dies in "[Stirng]" konvertieren möchten. Nachdem ich ratlos war, beschloss ich, die CStringArray-Klasse, die in Gist gefallen war, zu ändern und zu verwenden.
CStringArray
Die diesmal verwendete CStringArray-Klasse wird als Cocoa Touch Framework erstellt und kann mit Carthage installiert werden.
CStringArray nimmt "[String?]" Als Konstruktorargument und kann "char * const *" mit der Mitgliedsvariablen "pointers" abrufen. Das Folgende ist ein Verwendungsbeispiel.
let argv = CStringArray(["/bin/ls", "-la" , "/", nil])
posix_spawn(&pid, argv.pointers[0], &action, nil, argv.pointers, nil)
Da pointers
ein Array von UnsafeMutablePointer <CChar>
ist, können Sie die Nummer bei Bedarf mit count
abrufen.
Wenn Sie "& argv.pointers" verwenden, ist es mit "char **" kompatibel. Wenn Sie jedoch "pointers" in der Implementierung neu schreiben, tritt ein Speicherverlust auf, sodass ich denke, dass es sicher ist, mit "char * const *" umzugehen. ..
--Diese Implementierung: https://github.com/hnw/CStringArray/blob/master/CStringArray/CStringArray.swift
Tatsächlich kann es möglich sein, es ordentlich zu lösen, ohne eine solch robuste Klasse zu schaffen. Ich bin neu bei Swift, daher würde ich gerne von Profis hören.
Recommended Posts