【问题标题】:how to return different type of data from method in objective c如何从目标c中的方法返回不同类型的数据
【发布时间】:2021-12-01 21:54:23
【问题描述】:

我是目标 c 的新手。我有一个 mainViewController 类,我创建了另一个对象类。我在 mainViewController 的 .h 文件中声明另一个类。我用

#import <Foundation/Foundation.h>
#import "OtherClass.h"

NS_ASSUME_NONNULL_BEGIN

@interface ViewController : UIViewController

@property (strong, nonatomic) OtherClass *jsonData;

@end

NS_ASSUME_NONNULL_END

然后我从 mainViewController .m 文件中调用其他类的函数。

该方法返回 NSMutableArray 并且有效。但是有可能会发生错误,因此它可能不会返回 NSMutableArray 而是返回 NSError。我需要该类将错误返回给 mainViewController。

我怎样才能做到这一点?任何帮助表示赞赏。

【问题讨论】:

  • 您如何通过委托或 NsNotificationcenter 从其他类向 mainViewcontroller 类发送数据?
  • 我只是在其他类方法中使用返回数据。我不知道将它们发送回视图控制器的另一种方法,这就是我正在寻找的......
  • 在 oldschool Apple API 中,一个所谓的 NSError** out 参数被传递给 developer.apple.com/documentation/coredata/… 。实际例子stackoverflow.com/a/4654759/5329717

标签: ios objective-c


【解决方案1】:

您可以使用:id jsonData 代替 OtherClass *jsonData

@property (strong, nonatomic) OtherClass *jsonData;

=>

@property (strong, nonatomic) id jsonData;

然后做

if ([jsonData isKindOfClass: [OtherClass class]]) 
{

} 
else if ([jsonData isKindOfClass: [NSError class]]) 
{
} 
else 
{
    //It's none
}

但也许您想拥有 2 个属性,使用 if (jsonData) {}if (jsonError) {} 可能更简单?

@property (strong, nonatomic) OtherClass *jsonData;
@property (strong, nonatomic) NSError *jsonError;

另一种可能性是将其嵌入到自定义对象中:

@interface ResponseData: NSObject
@property (strong, nonatomic) OtherClass *data;
@property (strong, nonatomic) NSError *error;
@end

然后:

@interface ViewController : UIViewController
@property (strong, nonatomic) ResponseData *json;
@end

然后检查json.datajson.error

【讨论】:

    【解决方案2】:

    我的 Objective-C 有点生疏了,但我相信我能帮上忙。

    ObjC 中的id 与 Swift 中的AnyObject 非常相似。

    所以你的类型可以使用 id 但你需要转换它

    您可以使用isKindOfClass 来测试返回的类型,然后进行强制转换。

    @property (strong, nonatomic) id *someType;
    
    if [someType isKindOfClass:[NSMutableArray class]) {
    
    }
    
    if [someType isKindOfClass:[NSError class]) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多