首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩展字符串的UnsafePointer<Int8>初始化程序以接受空指针?

如何扩展字符串的UnsafePointer<Int8>初始化程序以接受空指针?
EN

Stack Overflow用户
提问于 2019-10-01 11:32:27
回答 1查看 219关注 0票数 4

在Swift中,有一个字符串初始化器,它以UnsafePointer<Int8> (或UnsafePointer<CChar>,我认为是相同的)作为参数。

但是,没有一个可选的UnsafePointer初始化器,例如,指针是NULL (或者说NULL),这在使用can时非常有用。

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

这就是我的分机。对吗?这就是实现该功能的方式吗?

代码语言:javascript
复制
extension String {
    init?(cString: UnsafePointer<Int8>?) {
        guard let cString = cString else { return nil }
        self = String(cString: cString)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-01 11:53:08

这很好。如果给定的参数是nil,则有一个“failable”(返回nil )的可故障初始化器。否则,它将打开参数并通过分配给self (可以用struct类型完成)初始化字符串。

在所有苹果平台上,CChar确实是与Int8相同的类型( char是一个有符号的字符)。我会将参数类型写为UnsafePointer<CChar>?,以强调C中与char类型的连接。

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

代码语言:javascript
复制
extension String {
    init?(cString: UnsafePointer<CChar>?) {
        guard let cString = cString else { return nil }
        self.init(cString: cString)
    }
}

但这纯粹是品味的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58183940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档