edit: oops, had to check for duplicates first, Nate answered this question already here . Although you may notice a slight difference in my version, which uses withUnsafeMutablePointer .
Youre getting downvoted because people donโt like โHow can I convert this Obj-C code to Swiftโ, but in this case this may be true, since this particular conversion is especially hairy. I think this works:
func report_memory() { var info = task_basic_info() var count = mach_msg_type_number_t(sizeofValue(info))/4 let kerr: kern_return_t = withUnsafeMutablePointer(&info) { task_info(mach_task_self_, task_flavor_t(TASK_BASIC_INFO), task_info_t($0), &count) } if kerr == KERN_SUCCESS { println("Memory in use (in bytes): \(info.resident_size)") } else { println("Error with task_info(): " + (String.fromCString(mach_error_string(kerr)) ?? "unknown error")) } }
A couple of basic constraints - sizeof returns an Int , but a function call requires UInt32 . Similarly (and a bit more without reason), TASK_BASIC_INFO is Int32 , but TASK_BASIC_INFO is required for the call.
The disgusting part takes place in the third parameter. task_info takes a pointer to several different types of structures of different sizes, depending on what information you want. Thus, you need to get a pointer from your TASK_BASIC_INFO object, and then apply it to a certain kind of pointer task_info really wants (which, as soon as you wade through all typedefs, a pointer to UInt32 ).
The docs for task_info say that the last count parameter should be considered the number of "the maximum number of integers in task_info", but when it says integers, I think it means that 32-bit integers are therefore divisible by 4.
Airspeed velocity
source share