2012-08-02 33 views
9

Tôi đã tìm thấy một kỳ lạ như cho tôi cách để khai báo một phương pháp trong Objective C.Objective C. cú pháp Weird

khai Method trong file .h:

-(void)methodName:(NSString *)str, int i; 

thực hiện phương pháp trong file .m:

-(void)methodName:(NSString *)str, int i 
{ 
    NSLog(@"str = %@, int = %d", str, i); 
} 

tôi có thể gọi phương pháp này như sau:

[self methodName:@"stringExample", 99]; 

Và nó sẽ hoạt động tốt.

Câu hỏi của tôi là khi nào tôi nên sử dụng cú pháp như vậy. Có sự khác biệt nào giữa nó và khai báo thông thường không?

Trả lời

6

Như đã trình bày here, những thông số tùy chọn :

phương pháp mà phải mất một số biến của tham số cũng có thể xảy ra, dù họ đang có một số những gì hiếm. Các tham số phụ được phân tách bằng dấu phẩy sau khi kết thúc tên phương thức. (Không giống như dấu hai chấm, dấu phẩy không coi là một phần của tên.) Trong ví dụ sau, tưởng tượng makeGroup: Phương pháp được thông qua một tham số cần thiết (nhóm) và ba thông số đó là không bắt buộc:

[receiver makeGroup:group, memberOne, memberTwo, memberThree];

Vì vậy, có, tuyên bố khác với tuyên bố thông thường. Tôi không thể tìm thấy bất kỳ việc sử dụng thường xuyên loại khai báo nào khác ngoài phương pháp varargs, trong đó tham số tùy chọn được khai báo là ....

1

Mục đích trong việc khai báo các phương pháp như: -(void)methodName:(NSString *)str yourInt:(int) i{...} là để làm cho nó dễ đọc hơn. Sau llvm 4.0 chuỗi tuyên bố, mảng, từ điển .. có thể được xử lý như ngôn ngữ C khác .. Ví dụ, cả hai khai báo dưới đây là đúng:

//old style 
array = [nsarray arraywithobjects:a, b, c, nil]; 
dict = [nsdictionary dictionarywithobjects:@[o1, o2, o3] 
forkeys:@[k1, k2, k3]]; 
number = [nsnumber numberwithchar:'x']; 
number = [nsnumber numberwithint:12345]; 
//new style 
array = @[ a, b, c ]; 
dict = @{ k1 : o1, k2 : o2, k3 : o3 }; 
number = @'x'; 
number = @12345; 

Resource từ một diễn đàn của Thổ Nhĩ Kỳ là here