Lors de l'exploitation d'une structure en C comme celle ci-dessous à partir de Swift via un pont
cstruct.h
#define MEM01_SIZE 255
struct cstruct {
char cstr01[MEM01_SIZE];
}
Dans swift2, il a été fait avec le code suivant, mais dans swift3, c'était une erreur de compilation.
swift:swift2.2.swift
var size: Int32 = 0
var cstruct = GetCStruct(&size)
let cstr01_str = withUnsafePointer(&cstruct.memory.cstr01)
{
return String.fromCString(UnsafePointer($0))!
}
Dans swift3, je suis passé en faisant ce qui suit.
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))
}
Je ne sais pas pourquoi cela fonctionne, donc je ne peux pas encore écrire de commentaire, mais cela a fonctionné pour le moment, alors prenez note.
Recommended Posts