Hacker News new | ask | show | jobs
by kattrali 3485 days ago
> How do you subclass an ObjC class from Rust — say, to create a delegate for a UI element?

The objc::declare module includes ClassDecl, which enables registering a new Objective-C class.

objc::declare documentation: http://sasheldon.com/rust-objc/objc/declare/index.html

Example usage: https://github.com/kattrali/rust-mac-app-examples/blob/maste...

> How is type safety handled? It looks like msg_send itself isn't type safe, but there are hand-written bindings… is that right?

Correct. msg_send operates on objc::runtime::Object references. The handwritten bindings use the impl_objc_class macro referenced in the post to define separate types for different Objective-C classes, and make messaging the wrong type of object a compile-time rather than a runtime error.

The impl_objc_class macro implements the ObjCClass and PartialEq traits for a new type: https://github.com/kattrali/rust-mac-app-examples/blob/maste...