在Swift中,有一个字符串初始化器,它以UnsafePointer<Int8> (或UnsafePointer<CChar>,我认为是相同的)作为参数。
但是,没有一个可选的UnsafePointer初始化器,例如,指针是NULL (或者说NULL),这在使用can时非常有用。
我想扩展String类以接受可选的不安全指针。
这就是我的分机。对吗?这就是实现该功能的方式吗?
extension String {
init?(cString: UnsafePointer<Int8>?) {
guard let cString = cString else { return nil }
self = String(cString: cString)
}
}发布于 2019-10-01 11:53:08
这很好。如果给定的参数是nil,则有一个“failable”(返回nil )的可故障初始化器。否则,它将打开参数并通过分配给self (可以用struct类型完成)初始化字符串。
在所有苹果平台上,CChar确实是与Int8相同的类型( char是一个有符号的字符)。我会将参数类型写为UnsafePointer<CChar>?,以强调C中与char类型的连接。
一个(只是略有不同的)替代方案是
extension String {
init?(cString: UnsafePointer<CChar>?) {
guard let cString = cString else { return nil }
self.init(cString: cString)
}
}但这纯粹是品味的问题。
https://stackoverflow.com/questions/58183940
复制相似问题