標籤:
作用:提供了另一種 為對象的屬性賦值及讀取對象屬性的編寫代碼的方式
—————Dog.h———————
@interface Dog : NSObject
@property(nonatomic,strong)NSString *name;
@end
----Book.h----
@interface Book : NSObject
@property(nonatomic,strong)NSString *name;
@property(nonatomic)float price;
@end
----Student.h---
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Book.h"
@interface Student : NSObject
{
float _score;
}
@property(nonatomic,strong)NSString *name;
@property(nonatomic,strong)Dog *dog;
@property(nonatomic,strong)NSArray *books;
@end
---Student.m----
@implementation Student
- (instancetype)init
{
self = [super init];
if (self) {
self.dog = [[Dog alloc]init];
Book *b1 = [[Book alloc]init];
b1.name = @"數學";
b1.price = 35.5;
Book *b2 = [[Book alloc]init];
b2.name = @"語文";
b2.price = 31.8;
self.books = @[b1,b2];
}
return self;
}
@end
----ViewController.m----
#import "ViewController.h"
#import "Student.h"
Student *stu = [[Student alloc]init];
//1.為私人成員賦值
[stu setValue:@98 forKey:@"score"];
[stu setValue:@"張3" forKey:@"name"];
NSLog(@"%@ %@",[stu valueForKey:@"name"],[stu valueForKey:@"score"]);
//2.訪問id類型的對象
id stu2 = [[Student alloc]init];
[stu2 setValue:@"李4" forKey:@"name"];
[stu2 setValue:@95.5 forKey:@"score"];
NSLog(@"%@ %f",[stu2 valueForKey:@"name"],[[stu2 valueForKey:@"score"] floatValue]);
//3.為層級類型的屬性賦值
[stu setValue:@"ww" forKeyPath:@"dog.name"];
NSLog(@"%@",stu.dog.name);
//4.使用內建的運算子對數組屬性進行運算
//擷取所有圖書的價格
NSLog(@"%@",[stu valueForKeyPath:@"books.price"]);
//擷取所有圖書的總價sum/平均價格avg/最大價格max/最小价格min
NSLog(@"%@",[stu valueForKeyPath:@"[email protected]"]);
//擷取圖書的總數
NSLog(@"%@",[stu valueForKeyPath:@"[email protected]"]);
IOS開發過程中的KVC機制