10 releases
0.2.2 | May 21, 2024 |
---|---|
0.2.0 | Apr 17, 2024 |
0.2.0-alpha.6 | Jul 19, 2022 |
0.2.0-alpha.4 | Jan 3, 2022 |
0.2.0-alpha.2 | Nov 22, 2021 |
#176 in macOS and iOS APIs
375,085 downloads per month
Used in 1,658 crates
(123 directly)
3MB
59K
SLoC
objc2-foundation
Rust bindings to Apple's framework Foundation.
This README is kept intentionally small to consolidate the documentation, see the Rust docs for more details on this crate.
This crate is part of the objc2
project,
see that for related crates.
lib.rs
:
Bindings to the Foundation
framework
See Apple's docs and the general docs on framework crates for more information.
This is the [std
] equivalent for Objective-C, containing essential data
types, collections, and operating-system services.
Rust vs. Objective-C types
A quick overview of some types you will encounter often in Objective-C, and their approximate Rust equivalent.
Objective-C | (approximately) equivalent Rust |
---|---|
NSData* |
Arc<[u8]> |
NSMutableData* |
Vec<u8> |
NSString* |
Arc<str> |
NSMutableString* |
String |
NSValue* |
Arc<dyn Any> |
NSNumber* |
Arc<enum { I8(i8), U8(u8), I16(i16), U16(u16), I32(i32), U32(u32), I64(i64), U64(u64), F32(f32), F64(f64), CLong(ffi::c_long), CULong(ffi::c_ulong) }> |
NSError* |
Arc<dyn Error + Send + Sync> |
NSException* |
Arc<dyn Error + Send + Sync> |
NSRange |
ops::Range<usize> |
NSComparisonResult |
cmp::Ordering |
NSArray<T>* |
Arc<[T]> |
NSMutableArray<T>* |
Vec<T> |
NSDictionary<K, V>* |
Arc<HashMap<K, V>> |
NSMutableDictionary<K, V>* |
HashMap<K, V> |
NSEnumerator<T>* |
Box<dyn Iterator<T>> |
NSCopying* |
Box<dyn Clone> |
Examples
Basic usage of a few Foundation types.
$ cargo add objc2-foundation --features=all
use objc2_foundation::{ns_string, NSCopying, NSArray};
let string = ns_string!("world");
println!("hello {string}");
let array = NSArray::from_id_slice(&[string.copy()]);
println!("{array:?}");
An example showing how to define your own interfaces to parts that may be missing in the autogenerated interface.