你好,我是一名新手,正在尝试解码以 [Byte] 形式发送回来的字节数组。当我尝试使用
Swift时,遇到了问题。if let string = String(bytes: d, encoding: .utf8) {
print(string)
} else {
print("not a valid UTF-8 sequence")
}
它说需要解包。我无法更改返回可选数组的基础代码,因为它是从框架返回的。
guard let
。guard let unwrappedBytes = d else { return }
使用此方法,您将获得与以前完全相同的数据,但没有问号。
我知道在Swift中理解可选项可能很困难。我建议查看苹果文档,这些文档非常好: https://developer.apple.com/documentation/swift/optional
[Byte]?表示这是一个可选数组。问号“?”在此处表示选项符号。
可选变量可能有值,也可能没有,这意味着返回的变量的可能值为空。请参阅参考链接:https://cocoacasts.com/what-is-an-optional-in-swift
将您的代码更改为:
if let string = String(bytes: d!, encoding: .utf8) {
print(string)
} else {
print("not a valid UTF-8 sequence")
}
}
我已经将符号!与d放在一起。这是使用Swift中的可选解包的一种方式。
d
,则将其转换为bytes
数组并使用 UTF-8 编码转换为字符串string
。这是一个使用可选绑定的嵌套if
语句,第一个if
用于解包d
,如果成功则执行第二个if
语句中的代码块。可以将原始代码简化为if let bytes = d, let string = String(bytes: bytes, encoding: .utf8) {}
,也可以展开为两个嵌套的if
语句:if let bytes = d { if let string = String(bytes: bytes, encoding: .utf8) {} }
。 - LarmeflatMap()
,例如[Byte?]
。但是现在您有一个可选的数组[Byte]?
。 - Larme