如何从 objective c 中的方法 return 获取不同类型的数据

how to return different type of data from method in objective c

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

#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 文件中调用另一个 Class 的函数。

方法 returns NSMutableArray 并且有效。但是有可能会发生错误,所以它可能不是 return NSMutableArray,而是 NSError。我需要 class 到 return 到 mainViewController 的错误。

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

您可以使用: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?

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

ObjC 中的

id 与 Swift 中的 AnyObject 非常相似。

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

您可以使用 isKindOfClass 来测试返回的类型然后转换它。

@property (strong, nonatomic) id *someType;

if [someType isKindOfClass:[NSMutableArray class]) {

}

if [someType isKindOfClass:[NSError class]) {

}