Objective-C中的参数类型(void *)如何转换为UnsafePointer<()>在斯威夫特?

时间:2014-12-29 18:15:29

标签: ios objective-c xcode swift

这是我需要转换为Swift的Objective-C函数的一个例子

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

经过大量的谷歌搜索后,我终于找到了一个答案,我可以将(void *)转换为有效的Swift类型。此类型显然表示为UnsafePointer<()>。

您知道为什么(void *)会转换为UnsafePointer<()>在斯威夫特?

语法是什么<()>叫什么意思?

1 个答案:

答案 0 :(得分:4)

<...>通用说明符。它解析了附加名称的泛型类型的通用占位符。

例如,Array是通用的,其中占位符是其元素类型。所以Array<String>是一个数组的类型,其通用占位符被指定为一个String - 意思是一个Array,其元素是字符串。您可以说[String],但Array<String>同样有效。

类似地,UnsafePointer是通用的,其中占位符是它指向的东西的类型。所以UnsafePointer<Float>是一个指向Float的不安全指针 - 它可能是Floats C数组中的第一个浮点数。 (这实际上出现在现实生活中的Swift编程中。)

()空元组类型,也称为Void。例如,不返回任何值的函数将返回()(或Void)。

所以,把它们放在一起,UnsafePointer<()>(或UnsafePointer<Void>)是一个不安全的指向虚空的指针 - 通过它,正好是void*