การหล่อแบบ Objective-C

การคัดเลือกประเภทเป็นวิธีการแปลงตัวแปรจากประเภทข้อมูลหนึ่งไปเป็นข้อมูลประเภทอื่น ตัวอย่างเช่นหากคุณต้องการเก็บค่า long เป็นจำนวนเต็มอย่างง่ายคุณสามารถพิมพ์ cast long เป็น int ได้ คุณสามารถแปลงค่าจากประเภทหนึ่งไปเป็นอีกประเภทหนึ่งได้อย่างชัดเจนโดยใช้ไฟล์cast operator ดังต่อไปนี้ -

(type_name) expression

ใน Objective-C โดยทั่วไปเราใช้ CGFloat ในการดำเนินการจุดลอยตัวซึ่งได้มาจากประเภทพื้นฐานของการลอยตัวในกรณีของ 32 บิตและสองเท่าในกรณีของ 64 บิต ลองพิจารณาตัวอย่างต่อไปนี้ที่ตัวดำเนินการ cast ทำให้การหารตัวแปรจำนวนเต็มหนึ่งตัวโดยอีกตัวแปรหนึ่งถูกดำเนินการเป็นการดำเนินการแบบทศนิยม -

#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;
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

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

ควรสังเกตที่นี่ว่าตัวดำเนินการนักแสดงมีความสำคัญเหนือการหารดังนั้นค่าของ sum จะถูกแปลงเป็นประเภทก่อน double และสุดท้ายมันจะถูกหารด้วยจำนวนที่ให้ค่าสองเท่า

การแปลงประเภทสามารถเป็นนัยซึ่งดำเนินการโดยคอมไพเลอร์โดยอัตโนมัติหรือสามารถระบุได้อย่างชัดเจนผ่านการใช้ cast operator. ถือเป็นการฝึกการเขียนโปรแกรมที่ดีในการใช้ตัวดำเนินการแคสทุกครั้งที่จำเป็นต้องมีการแปลงประเภท

โปรโมชั่นจำนวนเต็ม

การส่งเสริมจำนวนเต็มคือกระบวนการที่ค่าของประเภทจำนวนเต็ม "น้อยกว่า" int หรือ unsigned int จะถูกแปลงเป็น int หรือ unsigned int. พิจารณาตัวอย่างของการเพิ่มอักขระใน 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;
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

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

ที่นี่ค่าของ sum จะมาเป็น 116 เนื่องจากคอมไพเลอร์กำลังทำการส่งเสริมจำนวนเต็มและแปลงค่าของ 'c' เป็น ascii ก่อนที่จะดำเนินการเพิ่มจริง

การแปลงเลขคณิตปกติ

usual arithmetic conversionsมีการดำเนินการโดยปริยายเพื่อโยนค่าของพวกเขาในประเภททั่วไป ก่อนอื่นคอมไพเลอร์จะทำการเลื่อนขั้นจำนวนเต็มหากตัวถูกดำเนินการยังคงมีประเภทที่แตกต่างกันพวกมันจะถูกแปลงเป็นประเภทที่ปรากฏสูงสุดในลำดับชั้นต่อไปนี้ -

การแปลงเลขคณิตตามปกติจะไม่ดำเนินการสำหรับตัวดำเนินการกำหนดหรือสำหรับตัวดำเนินการเชิงตรรกะ && และ || ให้เราใช้ตัวอย่างต่อไปนี้เพื่อทำความเข้าใจแนวคิด -

#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;
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

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

ที่นี่เป็นเรื่องง่ายที่จะเข้าใจว่า c ตัวแรกถูกแปลงเป็นจำนวนเต็ม แต่เนื่องจากค่าสุดท้ายเป็นจำนวนทศนิยมดังนั้นการแปลงเลขคณิตตามปกติจึงใช้และคอมไพเลอร์จะแปลง i และ c ให้เป็นลอยและเพิ่มเข้าด้วยกันเพื่อให้ได้ผลลัพธ์ที่เป็นทศนิยม