swift3でswift2.3で動いていたC構造体メンバ(Char配列)を読み込むコードが動かなかった件について
下記のようなC構造体を、bridge経由でswiftから操作するとき、
cstruct.h
#define MEM01_SIZE 255
struct cstruct {
char cstr01[MEM01_SIZE];
}
swift2では下記のようなコードで出来ていたが、swift3ではコンパイラエラーになっていた。
swift2.2.swift
var size: Int32 = 0
var cstruct = GetCStruct(&size)
let cstr01_str = withUnsafePointer(&cstruct.memory.cstr01)
{
return String.fromCString(UnsafePointer($0))!
}
swift3では下記のようにすれば通った。
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))
}
なんでこれで動くのかよく分かってなくて、解説はまだ書けないけど、とりあえず動いたのでメモ。
Author And Source
この問題について(swift3でswift2.3で動いていたC構造体メンバ(Char配列)を読み込むコードが動かなかった件について), 我々は、より多くの情報をここで見つけました https://qiita.com/yuzuhara/items/20eb751c94effae5f96a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .