ObjC スタックオーバーフローの回答を Swift に変換しようとしていますが、失敗しています。UnsafeMutablePointer<mach_msg_type_number_t>
渡す必要があるときに を渡しているように見えますがinout mach_msg_type_number_t
、問題を解決できないようです。Swiftポインタのドキュメント(あまりない)について私が理解していることから、これらは交換可能であるはずです..?
詳細は以下をご覧ください。
目的 C は次のとおりです。
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size);
そして、これがSwiftで得た限りです(型チェックを簡単にするために多くの行があります)
let name: task_name_t = mach_task_self_
let flavor: task_flavor_t = task_flavor_t(MACH_TASK_BASIC_INFO)
var info: mach_task_basic_info
var size: mach_msg_type_number_t = UnsignedFixed(sizeof(mach_task_basic_info_t))
let kerr = task_info(name, flavor, info as task_info_t, &size)
task_info
署名は次のとおりです。
func task_info(target_task: task_name_t, flavor: task_flavor_t, task_info_out: task_info_t, task_info_outCnt: UnsafeMutablePointer<mach_msg_type_number_t>) -> kern_return_t
最後の行のエラーは次のとおりです。
Cannot convert the expression's type '(@!lvalue task_name_t, task_flavor_t, task_info_t, inout mach_msg_type_number_t)' to type 'kern_return_t'