gpt4 book ai didi

swift - 如何扩展 String 的 UnsafePointer 初始值设定项以接受 NULL 指针?

转载 作者:行者123 更新时间:2023-12-01 01:40:33 24 4
gpt4 key购买 nike

在 Swift 中,有一个字符串初始化器,它接受一个 UnsafePointer<Int8> (或 UnsafePointer<CChar> 我认为是一样的)作为一个论点。

但是,没有带可选 UnsafePointer 的初始化程序。 ,例如一个指针是 NULL (或 nil,说 swifty),这在使用 C API 时非常有用。

我想扩展 String 类以接受可选的不安全指针。

这就是我的扩展程序的样子。那是对的吗?这是实现该功能的方式吗?

extension String {
init?(cString: UnsafePointer<Int8>?) {
guard let cString = cString else { return nil }
self = String(cString: cString)
}
}

最佳答案

没关系。如果给定的参数是 nil,你有一个可失败的初始化器,它“失败”(返回 nil) .否则它会解开参数并通过赋值给 self 来初始化字符串。 (可以使用 struct 类型完成)。
CChar确实是与Int8相同的类型在所有 Apple 平台上(其中 char 是有符号字符)。我会将参数类型写为 UnsafePointer<CChar>?强调与char的联系输入 C。

一个(只是略有不同)的替代方案是

extension String {
init?(cString: UnsafePointer<CChar>?) {
guard let cString = cString else { return nil }
self.init(cString: cString)
}
}

但这纯粹是一个品味问题。

关于swift - 如何扩展 String 的 UnsafePointer<Int8> 初始值设定项以接受 NULL 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58183940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com