2014-12-29 49 views
2

這是我需要翻譯成斯威夫特參數類型(void *)在Objective-C中如何轉換爲UnsafePointer <()>在Swift中?

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo; 

很多谷歌上搜索,我終於找到了答案,我可以轉換(無效*),以有效的雨燕後一個Objective-C函數的例子。這種類型顯然表示爲UnsafePointer <()>。

你知道爲什麼(void *)在Swift中翻譯爲UnsafePointer <()>嗎?

什麼是語法<()>調用,它是什麼意思?

回答

4

<...>通用說明符。它解析了通用類型的通用佔位符,並將其附加到其名稱上。

例如,Array是一個泛型,佔位符是其元素類型。所以Array<String>是一個數組的類型,其通用佔位符被指定爲一個字符串 - 意味着一個數組的元素是字符串。您可能會說[String],但Array<String>同樣有效。

同樣,UnsafePointer是一個通用的,佔位符是它指向的東西的類型。所以UnsafePointer<Float>是一個不安全的指向Float的指針 - 它可能是C數組中的第一個浮點數。 (這實際上在現實生活斯威夫特編程上來。)

()空的元組類型,也被稱爲Void。例如,返回無值的函數返回()(或Void)。

所以,把它放在一起,UnsafePointer<()>(或UnsafePointer<Void>)是一個不安全的指針無效 - 這是由golly正是什麼void*是。

+1

正確的點!如果你曾經在多倫多地區,我欠你一杯嚴肅的啤酒! – Aggressor

+1

寫完答案後,我發現了一杯嚴重的啤酒! – matt

+1

UnsafePointer <()>已被swift 3.0中的UnsafeRawPointer所取代 – ViruMax

相關問題