这两个函数看起来有非常接近的签名和非常接近的描述:
字符串初始化(utf8字符串:)
通过从UTF8编码字节的给定空终止C数组复制数据来创建字符串。
字符串.init(验证UTF8:)
通过复制并验证给定指针引用的以空值结尾的UTF-8数据来创建新字符串。
既然两者都是可空的初始化器,那么它们的实际区别是什么?是否有一个可能的输入会给予每一个不同的输出?如果它们在行为上是相同的,那么推荐使用哪一个?
这两个函数看起来有非常接近的签名和非常接近的描述:
字符串初始化(utf8字符串:)
通过从UTF8编码字节的给定空终止C数组复制数据来创建字符串。
字符串.init(验证UTF8:)
通过复制并验证给定指针引用的以空值结尾的UTF-8数据来创建新字符串。
既然两者都是可空的初始化器,那么它们的实际区别是什么?是否有一个可能的输入会给予每一个不同的输出?如果它们在行为上是相同的,那么推荐使用哪一个?
1条答案
按热度按时间5sxhfpxr1#
String.init(validatingUTF8:)
是Swift标准库中的一个方法,在CString.swift中实现:String.init(utf8String:)
在NSStringAPI中实现。并且是基础
NSString
初始化器的Swift覆盖而后者又在swift-corelibs-foundation/Sources/Foundation/NSString中的非Apple平台上实现。swift作为
因此,这两个方法转换C字符串的方式没有区别,但是
String.init(utf8String:)
需要import Foundation
,而String.init(validatingUTF8:)
不需要额外的导入。