Rust Cocoa 框架如何创建 NSDictionary?initWithObjectsAndKeys_ 入参疑问
NSDictionary 两种创建方法的差异说明
你观察到的参数差异是Objective-C原生接口和Rust FFI绑定的特性导致的:
- Objective-C原生的
initWithObjectsAndKeys:本身是可变参数方法,方法签名里的firstObject只是可变参数列表的第一个入参,使用时需要在后面依次传入「键1、对象2、键2……」的配对值,最后以nil作为参数结束的标记,功能和接收数组参数的dictionaryWithObjects:forKeys:count:完全等价,只是入参形式不同。 - Rust的cocoa库绑定受限于跨语言FFI的实现限制,没法直接支持Objective-C的可变参数调用语法,所以只暴露了仅带首个参数的方法签名。如果要在Rust侧创建NSDictionary,更推荐使用同特征下的
initWithObjects_forKeys_count()方法,直接传入对象指针数组、键指针数组和对应数量即可,调用逻辑更安全,也更符合Rust的编码习惯。
相关代码示例:
// Objective-C 数组参数创建NSDictionary示例 NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count];
// Rust cocoa绑定中initWithObjectsAndKeys_的方法签名 unsafe fn initWithObjectsAndKeys_(self, firstObject: *mut Object) -> *mut Object
内容的提问来源于stack exchange,提问作者Mikeumus
相关产品推荐
相关产品推荐

