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))
}

なんでこれで動くのかよく分かってなくて、解説はまだ書けないけど、とりあえず動いたのでメモ。