在c#我可以聲明object o;
然後我可以分配o=(float)5.0;
或o="a string."
是否有Objective-C的等價物?我試圖使用id
,但它不採用像float或integer這樣的基本類型。感謝您的幫助。目標C中C#中的對象的等價物是什麼?
回答
Objective-C沒有CLR中的「統一類型系統」。換句話說,作爲C的一個超集,Objective-C的基本類型與對象實例完全不同的是百獸。 id
類型可以將引用(OS X/iPhone Objective-C運行時中的真正指針)存儲到任何對象實例。 C的原始類型(例如int
,float
等)必須被包裝在NSValue
或NSNumber
中,以被分配到類型id
。當然,這正是C#編譯器正在做的。這只是在C#中,你不必顯式地進行(un)boxing轉換。
很快,像
float val;
id obj = [NSNumber numberWithFloat:val];
...
float v = [obj floatValue];
代碼將成爲第二天性,如果按現代標準遺憾的是冗長。
謝謝巴里。我最終完成了你的建議。由於我需要在數組中存儲c類型數據的混合包,因此一旦將數據類型轉換爲NSNumber,就可以輕鬆地檢測數據類型了嗎? – 2010-05-29 11:52:12
'NSNumber'是'NSValue'的一個子類,所以你可以使用'-objCType'和C字符串比較來確定實際的數字類型...很漂亮的老派,但它的工作原理。 Objectie-C希望感受到動態類型和C的靜態類型相互衝突的情況。 – 2010-05-30 05:24:22
有沒有真的這樣的事情。您可以使用NSNumber
或NSValue
將原生數據類型處理爲對象。 NSString
會做字符串。您可以將所有這些分配給一個id
類型變量,但您需要使用正確的類init
方法創建它們。
你是對的,id
只適用於ObjC對象引用。如果你想引用一個帶有id引用的int,你需要把它放入一個NSNumber
。順便提一下,C#也是對這些原語進行裝箱,它只是自動進行。
回到我的日子,我們不得不在冰雪上行走15英里,上山,使用void pointers。哦,我們沒有StackOverflow!
實際上,C#數據類型只是它們各自類的別名,這就是它們可以分配給對象類型的原因。例如,int實際上是一個名爲Int32的類。
正如前面提到的@Barry,Objective-C的情況並非如此。
- 1. 目標C/iOS中python的file.read()的等價物是什麼?
- 2. 什麼是C++中的instanceof等價物?
- 3. 什麼是C#中的vbNullChar等價物?
- 4. C#中bigint的等價物是什麼?
- 5. C#中TreeBidiMap的等價物是什麼?
- 6. C#中memset的等價物是什麼?
- 7. 什麼是UIDevice.currentDevice()。orientation.isLandscape的目標c等價物?
- 8. 目標c中「C#屬性」的等價控制是什麼?
- 9. rlwinm的C++等價物是什麼? (PowerPC)
- 10. 什麼是EventWaitHandle的Objective C等價物?
- 11. 什麼是ChrW(e.KeyCode)的C#等價物?
- 12. 什麼是UINT32_MAX的C++等價物?
- 13. &H2的C#等價物是什麼?
- 14. 什麼是C?:operator的Ruby等價物?
- 15. 什麼是C++ typeid的Scala等價物?
- 16. 什麼是Java DecimalFormat的c#等價物?
- 17. 什麼是CRT的C++等價物?
- 18. 什麼是C++ deque的Java等價物?
- 19. 什麼是MsgWaitForMultipleObjects的C#等價物?
- 20. 什麼是Java Socket.getInetAddress()的C#等價物?
- 21. 什麼是C++中的C#靜態實例的等價物?
- 22. C++標準庫中boost :: variant的等價物是什麼?
- 23. C#中這個標記器代碼的等價物是什麼?
- 24. 在C#中C++ const size_t的等價物是什麼?
- 25. 什麼是在C#中的C++隱式鏈接DLL等價物?
- 26. 在C++中,objective-c NSString *的最佳等價物是什麼?
- 27. 什麼是C/C++中#define的HTML等價物?
- 28. 什麼是在C#中創建匿名對象的Java等價物?
- 29. 什麼是C#和LINQ中波斯語中N'something的等價物?
- 30. 什麼是Java Akka中的scala伴隨對象的等價物?
'可以'並不意味着'應該';對象的自由使用可能會導致運行時錯誤,這些錯誤可能在編譯時使用更具體的類型來捕獲。 – 2010-05-28 09:44:42
我相信我不是唯一需要這個人的人。原因是我正在開發一個平臺。我試圖在我的最後做更多的工作,所以我的客戶會少做。 – 2010-05-29 11:33:23