Objective-C類型轉換

類型轉換是一種將變數從一種數據類型轉換為另一種數據類型的方法。 例如,如果要將long值存儲到簡單整數(int)中,則可以將long類型轉換設置為int。使用強制轉換運算符將值從一種類型轉換為另一種類型,如下所示 -

(type_name) expression

在Objective-C中,通常使用CGFloat進行浮點運算,它是在32位情況下從基本類型的float派生的,在64位情況下是double類型。參考以下示例,使用轉換運算符將一個整數變數除以另一個整數變數,結果為浮點數 -

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

執行上面示例代碼,得到以下結果:

2018-11-15 09:25:04.889 main[28822] Value of mean : 3.400000

這裏應該注意,強制轉換操作符優先於除法,因此sum的值首先轉換為double類型,最後除以count,得到double類型的值。

類型轉換可以是隱式的,由編譯器自動執行,也可以通過使用轉換運算符顯式指定。每當需要類型轉換時,使用強制轉換運算符是一種很好的編程習慣。

整型提升

整數提升是將整數類型“小於” intunsigned int的值轉換為intunsigned 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;
}

當執行上面示例代碼時,得到以下結果:

2018-11-15 09:28:10.138 main[110351] Value of sum : 116

這裏,sum的值將變為116,因為編譯器進行整數提升,並在執行加法運算之前將字元'c'的值轉換為ascii值。

通用的算術轉換

隱式執行通常的算術轉換以將它們的值轉換為通用類型。編譯器首先執行整數提升,如果運算元仍然具有不同的類型,則它們將轉換為在以下層次結構中顯示最高的類型 -

通常的算術轉換不是為賦值運算符執行,也不是為邏輯運算符&&||執行。下麵看一個例子來理解這個概念 -

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

執行上面示例代碼,得到以下結果:

2018-11-15 09:28:10.138 main[110351] Value of sum : 116

在這裏,很容易理解第一個c字元被轉換為整數,但是因為最終值是float,所以通常的算術轉換適用,編譯器將ic轉換為float並相加,所以最終產生的是float類型。


上一篇: Objective-C類型定義(typedef) 下一篇: Objective-C日誌處理