这是我需要转换为Swift的Objective-C函数的一个例子
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo;
经过大量的谷歌搜索后,我终于找到了一个答案,我可以将(void *)转换为有效的Swift类型。此类型显然表示为UnsafePointer<()>。
您知道为什么(void *)会转换为UnsafePointer<()>在斯威夫特?
语法是什么<()>叫什么意思?
答案 0 :(得分:4)
<...>
是通用说明符。它解析了附加名称的泛型类型的通用占位符。
例如,Array是通用的,其中占位符是其元素类型。所以Array<String>
是一个数组的类型,其通用占位符被指定为一个String - 意思是一个Array,其元素是字符串。您可以说[String]
,但Array<String>
同样有效。
类似地,UnsafePointer是通用的,其中占位符是它指向的东西的类型。所以UnsafePointer<Float>
是一个指向Float的不安全指针 - 它可能是Floats C数组中的第一个浮点数。 (这实际上出现在现实生活中的Swift编程中。)
()
是空元组类型,也称为Void
。例如,不返回任何值的函数将返回()
(或Void
)。
所以,把它们放在一起,UnsafePointer<()>
(或UnsafePointer<Void>
)是一个不安全的指向虚空的指针 - 通过它,正好是void*
。