gpt4 book ai didi

swift - 为什么 String.addingPercentEncoding() 的返回值是可选的?

转载 作者:IT王子 更新时间:2023-10-29 05:06:38 27 4
gpt4 key购买 nike

用于百分比转义的 String 方法的签名是:

func addingPercentEncoding(withAllowedCharacters: CharacterSet)
-> String?

(这是 Swift 2 中的 stringByAddingPercentEncodingWithAllowedCharacters。)

为什么这个方法返回一个可选的?

文档说“如果转换不可能”,该方法返回 nil,但不清楚转义转换在什么情况下会失败:

  • 字符使用 UTF-8 进行转义,UTF-8 是一种完整的 Unicode 编码。任何有效的 Unicode 字符都可以使用 UTF-8 编码,因此可以进行转义。

  • 我想也许该方法对允许的字符集和用于转义的字符之间的不良交互应用了某种健全性检查,但事实并非如此:无论允许的字符集是否正确,该方法都会成功chars 包含“%”,如果允许的字符集为空,也会成功。

就目前而言,非可选返回值似乎在强制进行无意义的错误检查。

最佳答案

我就此向 Apple 提交了一份错误报告,并收到了回复——非常有帮助的回复,一点也不逊色!

事实证明(令我惊讶的是)可以成功创建包含未配对 UTF-16 surrogate chars 形式的无效 Unicode 的 Swift 字符串.这样的字符串会导致 UTF-8 编码失败。下面是一些说明此行为的代码:

// Succeeds (wat?!):
let str = String(
bytes: [0xD8, 0x00] as [UInt8],
encoding: .utf16BigEndian)!

// Returns nil:
str.addingPercentEncoding(withAllowedCharacters: .alphanumerics)

关于swift - 为什么 String.addingPercentEncoding() 的返回值是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558933/

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