KVC 요약
간단한 소개
KVC: 키 값 인코딩
역할:
값 및 할당
컨트롤러에서
[person setValue:@" " forKey:@"name"];
을 사용하여 인류의 대상의name 속성을 부여할 수 있고 [person setValue:@" " forKeyPath:@"dog.name"];
을 사용하여 인류의 대상의dog 속성의name 속성을 부여할 수 있다. 주의해야 할 것은 forKeyPath
은 forKey
의 모든 기능을 포함하고 점문법에 따라 층층이 값을 부여할 수 있다는 것이다.대상의 개인 구성원 변수의 값 바꾸기 (중요)
만약에 HSPerson 클래스에 개인 구성원 변수
_money
이 있다면 컨트롤러에서 이 속성의 값을 [person setValue:@"199.99" forKeyPath:@"money"];
으로 바꿀 수도 있다. 예를 들어 다음과 같다.[self.pageControl setValue:[UIImage imageNamed:@"current"]
// KVC .
// CATransform3DMakeRotation , , .
NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];
[_imageView.layer setValue:value forKeyPath:@"transform.scale"];
//
let filter = CIFilter(name: "CIQRCodeGenerator")
//
filter?.setDefaults(
// NSData
let inputStr = contentStr
let data = inputStr.dataUsingEncoding(NSUTF8StringEncoding)
filter?.setValue(data, forKey: "inputMessage")
//
filter?.setValue("M", forKey: "inputCorrectionLevel")
대상의 개인 구성원 변수의 값 가져오기 (중요)
NSLog(@"%f", [[person valueForKeyPath:@"_money"] floatValue]);
:UILabel *placeholderLabel = [self valueForKey:@"placeholderLabel"];
placeholderLabel.textColor = placeholderColor;
간단한 사전 회전 모형
구성 방법에서
[self setValuesForKeysWithDictionary:dict];
코드 사용//HSPerson HSBook ,HSBook name price
//HSPerson.m
-(NSString *)description{
return [NSString stringWithFormat:@" :%@---- :%f", _name, _height];
}
- (instancetype)initWithDict:(NSDictionary *)dict{
if (self = [super init]) {
/*
self.name = dict[@"name"];
self.height = [dict[@"height"] floatValue];
*/
// KVC
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
+ (instancetype)personWithDict:(NSDictionary *)dict{
return [[self alloc] initWithDict:dict];
}
//
NSDictionary *dict = @{
@"name": @" ",
@"height" : @18,
@"books" :@[
@{@"name": @" ", @"price": @1.009},
@{@"name": @" ", @"price": @111111.009}
]
};
HSPerson *person = [[HSPerson alloc] initWithDict:dict];
NSLog(@"%@-----%@", person, person.books);
주의해야 할 것은 KVC를 이용하여 모형을 한 층만 돌릴 수 있기 때문에 돌린 모형의 결과는
2016-05-19 17:53:20.898 KVCTest[3998:166887] : ---- :18.000000-----(
{
name = "\U8475\U82b1\U5b9d\U5178";
price = "1.009";
},
{
name = "\U8f9f\U90aa\U5251\U8c31";
price = "111111.009";
}
)
KVC는 다중 데이터 회전 모델을 실현할 수 없음을 알 수 있습니다
[ setValue:forUndefinedKey:]
을 호출하여 key
이 찾을 수 없는 잘못을 보고한다.setValue:forUndefinedKey:
을 호출하여 오류를 보고한다.setValue:forUndefinedKey:
, 시스템의 방법을 덮어쓰면 KVC, 사전 모형을 계속 사용할 수 있습니다.모델 전환 사전
구조 방법에서
[person dictionaryWithValuesForKeys:@[@"name", @"height", @"books"]];
을 호출하다HSPerson *person = [[HSPerson alloc] init];
person.name = @" ";
person.height = 1.78;
HSBook *b1 = [[HSBook alloc] init];
b1.name = @"tianlongbabu";
b1.price = 50.0;
HSBook *b2 = [[HSBook alloc] init];
b2.name = @"shediaoyinxing";
b2.price = 50.0;
person.books = @[b1,b2];
NSDictionary *dict = [person dictionaryWithValuesForKeys:@[@"name", @"height", @"books"]];
NSLog(@"%@", [dict class]);
NSLog(@"%@", dict);
2016-05-19 19:14:14.999 KVCTest[4358:217403] __NSDictionaryI
2016-05-19 19:14:15.000 KVCTest[4358:217403] {
books = (
"",
""
);
height = "1.78";
name = "\U5f20\U4e09";
}
대량 평가
책 그룹의 모든 책의name를 꺼내려면 아래 코드
NSArray *names = [person valueForKeyPath:@"books.name"];
또는 NSArray *names = [person.books valueForKeyPath:@"name"];
을 사용하십시오//
2016-05-19 19:15:47.576 KVCTest[4367:218579] (
tianlongbabu,
shediaoyinxing
)
수조의 길이와 안쪽 속성의 합을 계산할 수 있다
NSLog(@"%@",[person valueForKeyPath:@"books.@count"]);
NSLog(@"%@",[person valueForKeyPath:@"[email protected]"]);
//
2016-05-19 19:20:29.658 KVCTest[4386:222221] 2
2016-05-19 19:20:29.675 KVCTest[4386:222221] 100
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.