gpt4 book ai didi

Swift:String starts(with:) vs hasPrefix

转载 作者:搜寻专家 更新时间:2023-10-30 22:30:15 25 4
gpt4 key购买 nike

String.hasPrefix (或 [NSString hasPrefix])一直是 Foundation 的一部分。但是,我刚刚注意到现在我们也有 starts(with:) .

此方法来自 Sequence 但它也适用于 String

我的问题是,我应该选择哪一个?有什么性能方面的考虑吗?从 Objective-C 时代开始,我就习惯了 hasPrefix,但是 starts(with:) 更直观并且适用于其他序列。

最佳答案

String.hasPrefix()StringLegacy.swift 中实现作为

extension String {

public func hasPrefix(_ prefix: String) -> Bool {
if _fastPath(self._guts.isNFCFastUTF8 && prefix._guts.isNFCFastUTF8) {
guard prefix._guts.count <= self._guts.count else { return false }
return prefix._guts.withFastUTF8 { nfcPrefix in
let prefixEnd = nfcPrefix.count
return self._guts.withFastUTF8(range: 0..<prefixEnd) { nfcSlicedSelf in
return _binaryCompare(nfcSlicedSelf, nfcPrefix) == 0
}
}
}

return starts(with: prefix)
}

}

这意味着(如果我理解正确的话):如果字符串和候选前缀都使用基于 UTF-8 的存储,那么将直接比较 UTF-8 字节。否则它会回退到 starts(with:) 并进行基于 Character 的比较。

所以结果没有区别,但是 hasPrefix() 针对原生 Swift 字符串进行了优化。

注意:这是来自 master (Swift 5) 分支,早期版本情况可能有所不同。

关于Swift:String starts(with:) vs hasPrefix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54807543/

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