如何从 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.data
或 json.error
?
我的Objective-C有点生疏,但我相信我能帮上忙
ObjC 中的 id
与 Swift 中的 AnyObject
非常相似。
所以你的类型可以使用 id
但你需要强制转换它
您可以使用 isKindOfClass
来测试返回的类型然后转换它。
@property (strong, nonatomic) id *someType;
if [someType isKindOfClass:[NSMutableArray class]) {
}
if [someType isKindOfClass:[NSError class]) {
}
我是 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.data
或 json.error
?
我的Objective-C有点生疏,但我相信我能帮上忙
ObjC 中的id
与 Swift 中的 AnyObject
非常相似。
所以你的类型可以使用 id
但你需要强制转换它
您可以使用 isKindOfClass
来测试返回的类型然后转换它。
@property (strong, nonatomic) id *someType;
if [someType isKindOfClass:[NSMutableArray class]) {
}
if [someType isKindOfClass:[NSError class]) {
}