gpt4 book ai didi

ios - Objective-C KVC 改变属性的类型

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:39 25 4
gpt4 key购买 nike

我是 Objective-c 的新手。我正在编写一个将字典转换为对象的简单方法来练习 KVC 知识:

+(id) ConvertDictionary:(NSDictionary *)dict 
ToClassInstance:(Class)type{

id targetObj = nil;
if(dict){
NSArray *dictKeys = dict.allKeys;
targetObj = [[type alloc] init];

for (NSString*item in dictKeys) {
[targetObj setValue:[dict objectForKey:item] forKey:item];
}
}
}
return targetObj;
}

还有一个简单的类:

 #import <Foundation/Foundation.h>
@interface foo : NSObject
@property (nonatomic) int value;
@property(nonatomic,strong) NSDate *dateTime;
@end

并使用以下代码运行方法:

-(void)testConvert
{
NSArray *value = [NSArray arrayWithObjects:
[NSNumber numberWithInt:2],@"wrongDateString",nil];
NSArray *key = [NSArray arrayWithObjects:@"value",@"dateTime", nil];

NSDictionary *dict = [NSDictionary dictionaryWithObjects: value forKeys:key];

id result= [EPMClassUtility ConvertDictionary:dict
ToClassInstance:[foo class]];
foo *convert = (foo*) result;
NSLog(@"get value: %@",convert.dateTime);
//console write the line: get value:wrongDateString

}

我的问题是,我通过 setValue:forKey: 为属性提供了一个类型错误的值(应该是 NSDate 但实际上是 NSString)。但是为什么在运行时或在 XCode 中没有发生异常,dateTime 属性如何接受 NSString 值?

最佳答案

objective-c 没有自动运行时类型检查,使用 setValue:frorKey: 避免了任何编译时检查,因为值参数可以是任何类型。

如果您想要运行时类型检查,您将需要实现您自己的 -setDateTime:(作为示例)以在运行时检查类型。

关于ios - Objective-C KVC 改变属性的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com