Đúc loại Objective-C

Ép kiểu là một cách để chuyển đổi một biến từ kiểu dữ liệu này sang kiểu dữ liệu khác. Ví dụ: nếu bạn muốn lưu trữ một giá trị dài thành một số nguyên đơn giản thì bạn có thể nhập cast long thành int. Bạn có thể chuyển đổi các giá trị từ loại này sang loại khác một cách rõ ràng bằng cách sử dụngcast operator như sau -

(type_name) expression

Trong Objective-C, chúng tôi thường sử dụng CGFloat để thực hiện hoạt động dấu phẩy động, bắt nguồn từ kiểu float cơ bản trong trường hợp 32-bit và kép trong trường hợp 64-bit. Hãy xem xét ví dụ sau trong đó toán tử ép kiểu khiến phép chia một biến số nguyên cho một biến số nguyên khác được thực hiện như một phép toán dấu phẩy động:

#import <Foundation/Foundation.h>

int main() {
   int sum = 17, count = 5;
   CGFloat mean;

   mean = (CGFloat) sum / count;
   NSLog(@"Value of mean : %f\n", mean );

   return 0;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

2013-09-11 01:35:40.047 demo[20634] Value of mean : 3.400000

Cần lưu ý ở đây rằng toán tử ép kiểu được ưu tiên hơn phép chia, vì vậy giá trị của sum lần đầu tiên được chuyển đổi thành loại double và cuối cùng nó được chia cho số đếm tạo ra một giá trị gấp đôi.

Chuyển đổi kiểu có thể là ẩn được trình biên dịch thực hiện tự động hoặc có thể được chỉ định rõ ràng thông qua việc sử dụng cast operator. Việc sử dụng toán tử ép kiểu được coi là phương pháp lập trình tốt bất cứ khi nào cần thiết chuyển đổi kiểu.

Quảng cáo số nguyên

Thăng hạng số nguyên là quá trình mà các giá trị của kiểu số nguyên "nhỏ hơn" int hoặc là unsigned int được chuyển đổi thành int hoặc là unsigned int. Hãy xem xét một ví dụ về việc thêm một ký tự trong một int -

#import <Foundation/Foundation.h>

int main() {
   int  i = 17;
   char c = 'c';  /* ascii value is 99 */
   int sum;

   sum = i + c;
   NSLog(@"Value of sum : %d\n", sum );

   return 0;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

2013-09-11 01:38:28.492 demo[980] Value of sum : 116

Ở đây, giá trị của sum là 116 vì trình biên dịch đang thực hiện việc thăng hạng số nguyên và chuyển đổi giá trị của 'c' thành ascii trước khi thực hiện thao tác cộng thực tế.

Chuyển đổi số học thông thường

Các usual arithmetic conversionsđược thực hiện ngầm định để truyền các giá trị của chúng vào một kiểu chung. Trình biên dịch đầu tiên thực hiện thăng hạng số nguyên , nếu các toán hạng vẫn có các kiểu khác nhau thì chúng được chuyển đổi thành kiểu xuất hiện cao nhất trong hệ thống phân cấp sau:

Các phép chuyển đổi số học thông thường không được thực hiện cho các toán tử gán, cũng không cho các toán tử logic && và ||. Hãy lấy ví dụ sau để hiểu khái niệm -

#import <Foundation/Foundation.h>

int main() {
   int  i = 17;
   char c = 'c';  /* ascii value is 99 */
   CGFloat sum;

   sum = i + c;
   NSLog(@"Value of sum : %f\n", sum );
   return 0;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

2013-09-11 01:41:39.192 demo[15351] Value of sum : 116.000000

Ở đây, có thể hiểu đơn giản rằng c đầu tiên được chuyển đổi thành số nguyên nhưng vì giá trị cuối cùng là float, vì vậy việc chuyển đổi số học thông thường được áp dụng và trình biên dịch chuyển đổi i và c thành float và thêm chúng vào để tạo ra kết quả float.