Hướng dẫn cách sử dụng block trong Objective C

1/ Sơ lược về Objective C:

Như chúng ta đã biết một biến có thể lưu một giá trị, một đối tượng có bao gồm các thuộc tính, phương thức… Tuyệt vời! Block hỗ trợ chúng ta lưu một đoạn code sẽ được sử dụng, tương tác nhiều lần. Bài này mình sẽ giúp các bạn tìm hiểu về Objective C:

  • Khai báo block 
  • Định nghĩa block
  • Truy vấn block, và tính chất block.
  • ứng dụng block

=>ok mình bắt đầu nào!!!

đầu tiên khởi tạo dự án mới:

objective C

ta là việc trên file ViewController.m trong:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a 
}
  • Đầu tiên Cách khai báo một block:

Một block khai báo tổng quát:

kiểu dữ liệu trả về (^tên block)(kiểu dữ liệu 1,kiểu dữ liệu 2,kiểu dữ liệu 3);

+) Đơn giản nhất block không có tham số truyền vào :

Kiểu trả về “void”, tên block “_in”, không tham số truyền vào “( )”.

void (^_in)();

+) block một tham số:

Kiểu trả về “int”, tên block “myBlock”, 1 tham số truyền vào “( int)”.

int (^myBlock)(int);

+) block  nhiều tham số truyền vào:

Kiểu trả về “void”, tên block “myBlock”, 2 tham số truyền vào “( int,int)”.

//block nhiều tham số
    void (^inSo)(int,int);//khai báo
  • Định nghĩa block

Định nghĩa block tổng quát:

blockX=^(tham số1, tham số2 , tham số3){mã code};

ví dụ: Ta định nghĩa các block khai báo bên trên:
block _in : đơn giản ta chỉ log chuỗi.

_in=^(){
       NSLog(@"infor");
};

block myBlock: truyền vào tham số “num”, log ra thông tin “num”, và trả về giá trị num.

myBlock= ^(int num){//định nghĩa
        NSLog(@"%d",num);
        return num;
    };

block inSo: truyền vào 2 tham số “soA” “soB”, tính tổng và log ra giá trị tổng.

inSo=^(int soA,int SoB){//định nghĩa
       int tong=soA+SoB;
       NSLog(@"%d",tong);
};
  •  Truy vấn block, và tính chất block.

Truy vấn tổng quát:

tên block(tham số 1, tham số 2, tham sô3)l;

ví dụ truy vấn các ví dụ trên:

block _in :

_in()

kết quả: infor

block myBlock:

myBlock(7);

kết quả: 7

 

block inSo:

inSo(6,4);

kết quả:10

Thêm đoạn mã sau: 

int i=100;    //lấy được giá trị của biến bên ngoài hàm!!!
    void (^inI)()=^(){
        NSLog(@"%d",i);
    };
    inI();

ở đây trong block không truyền tham số biến i vào nhưng ta vẫn sử dụng biến i được !!!

Tính chất rất tuyệt vời của block custom (block lấy được các biến địa phương ngay trước khi khai báo đó).

khi chạy cho kết quả: 100.

int i=100;    //lấy được giá trị của biến bên ngoài hàm!!!
    void (^inI)()=^(){
        NSLog(@"%d",i);
    };
    inI();
    i=200
    ;
    inI();

gán lại giá trị biến i=200 tuy thế khi gọi block kết quả vẫn trả về :100

như thế block chỉ tham chiếu giá trị chứ k tham chiếu ô nhớ.

  • ứng dụng block:

Các bạn đã làm quen với block cách khai báo, định nghĩa , truy vấn. Ở đây mình đưa ra một ví dụ về cách áp dụng block :

Mình có ví dụ thế này:

-(int) addInfor: (int)intX{
    intX=6;
    NSLog(@"so:%ld",(long)intX);
    return intX;
}

gọi hàm:

int soA;
[self addInfor:[self addInfor:soA]];

khi đó hàm luôn trả về : so:6.

Tính chất lưu lại giá trị trên hàm chỉ lưu được 1 giá trị của kiểu dữ liệu trả về ,trên block được ứng dụng rất nhiều lưu trữ nhiều kiểu giá trị khác nhau!
Cách truyền block vào hàm:

Tổng quát:

(void) tên hàm  :(kiểu dữ liệu)tên biến1 : (kiểu dữ liệu)tên biến2 :block

(void) tên hàm  :(kiểu dữ liệu)tên biến1 : (kiểu dữ liệu)tên biến2 : (kiểu trả về block (^)(kiểu dữ liệu A ,kiểu dữ liệu B)) Tên block;

Ví dụ :

-(void) add:(NSString*)name :(int)age :(void (^)(NSInteger diem,NSString *monHoc,NSError *error))completion{
    completion(3,@"hoa",nil);// truyền tham số cho block
    name=@"minh";
    age=8;
}

khi này các tham số của block lưu lại  thông tin truyền vào block.

Thêm đoạn mã sau trong viewDidLoad:

Đây là đoạn code mã nguồn cho block:

// ứng dụng block
    [self add:@"binh" :22 :^(NSInteger diem, NSString *monHoc, NSError *error) {
        NSLog(@"%@,%ld",monHoc,(long)diem);
    }];

=> Khi đó các tham số block đã lưu lại thông tin! Ta gọi tham số ra và làm việc !!!

Ở đây là một  ví dụ đơn giản, trong thực tế ta khai báo các block để lưu lại thông tin các tham số và dùng các tham số định nghĩa lại block để làm việc với  tham số!.

Ví dụ load API truyện về ta cần lưu lại thông tin số cuốn sách, tên sách… định nghĩa block gồm các thông tin trên. Khi đó đối với từng hàm ta gọi block trên, và định nghĩa nghĩa block tuỳ mục đích sử dụng với các thông tin block cung cấp.

link full code

http://www.mediafire.com/download/cgkgo8otu5imss6/blockCoBan.zip

Có gì trong phần tiếp theo:

Bài tiếp theo mình sẽ giới thiêu cho các bạn cơ bản vê IOS … thành phần cấu trúc một chương trình!!!

  • Nếu các bạn muốn biết thêm các kỹ thuật khác về ios, các bạn có thể tham khảo thêm các khóa học ios tại đây.

 

 

 

Add a Comment

Your email address will not be published. Required fields are marked *