首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有输入参数但使用outParam的方法签名

没有输入参数但使用outParam的方法签名
EN

Stack Overflow用户
提问于 2015-07-15 07:15:36
回答 3查看 45关注 0票数 1

我想要定义一个方法,它不接受输入参数,但是有一个或多个outParams

我不能将方法更改为简单地返回outParam所需的类型,因为其中许多方法需要多个outParam值,而且我无法使用集合作为返回类型。

作为一种解决办法,我一直在使用:

代码语言:javascript
运行
AI代码解释
复制
- (BOOL)methodName:(NSString*)nothing outParam:(NSData*)foo outParam:(NSData*)bar;

我想要这样的东西:

代码语言:javascript
运行
AI代码解释
复制
- (BOOL)methodName outParam:(NSData*)foo outParam:(NSData*)bar;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-15 07:22:26

由于objects对象是由指针引用的,因此输出参数使用双指针:

代码语言:javascript
运行
AI代码解释
复制
- (BOOL)methodNameWithOutParam:(NSData* __autoreleasing *)foo
                      outParam:(NSData* __autoreleasing *)bar;

这将允许您在方法内分配自动释放的NSData对象,并在调用者中使用它们。

这种模式类似于在许多NSErrorAPI中用于处理iOS的模式。但是,这并不理想,因为您必须将指针与设置它们的位置分开声明,即使这两个位置非常接近。

在这种情况下,foobar NSData对象很可能是密切相关的。如果是这样的话,考虑将两者“连接”成有意义的东西。这将允许您返回一个对象:

代码语言:javascript
运行
AI代码解释
复制
@interface BazData
@property (readwrite, nonatomic) NSData *foo;
@property (readwrite, nonatomic) NSData *bar;
@end
...
- (BazData*)methodName;
票数 2
EN

Stack Overflow用户

发布于 2015-07-15 07:19:58

正如许多Cocoa方法接受NSError **参数一样,您也可以定义如下方法:

代码语言:javascript
运行
AI代码解释
复制
- (BOOL)methodWithOutParam:(NSData * __autoreleasing *)foo outParam:(NSData * __autoreleasing *)bar;

确保在使用这些参数的地方添加一个额外的*。

代码语言:javascript
运行
AI代码解释
复制
*foo = [@"Test" dataUsingEncoding:NSUTF8StringEncoding];
票数 1
EN

Stack Overflow用户

发布于 2015-07-15 07:28:35

您不需要有"nothing“输入参数。如果所有的仿射都是外射,那就没关系了。“方法名称”和“参数名称”之间的区别实际上是虚构的--它们都是一个选择器的一部分。所以你可以这样称呼它:

代码语言:javascript
运行
AI代码解释
复制
[self myMethodGetFoo:&foo getBar:&bar getBaz:&baz];

请注意,这里没有“空白”或“跳过”参数。它只使用了三个外缘。您可以这样定义这样的方法:

代码语言:javascript
运行
AI代码解释
复制
- (BOOL)myMethodGetFoo:(NSData* __autoreleasing *)foo
                getBar:(NSData* __autoreleasing *)bar
                getBaz:(NSData* __autoreleasing *)baz;

(正如其他答案中所建议的)请再次注意,这个初始的“参数”没有什么“特殊”。您刚刚决定使用双指针来创建外部参数。

(如果您不太清楚为什么外部参数对对象使用双指针,那么这是一个不同的问题,但也是一个常见的挑战。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31434361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档