为什么Swift意外插入“;可选”;在stringFromData的开头?

为什么Swift意外插入“;可选”;在stringFromData的开头?,swift,string,optional,Swift,String,Optional,我在iPad上运行此代码以创建虚拟外设。 它开始做广告。 我在iPhone上运行central。 中央检测外围设备并连接和订阅。 外围日志在日志中意外地有“可选”,尽管它不在stringFromData中 图中显示了stringFromData内容和日志 stringFromData是一个可选的。当您使用字符串(description:)获取可选项的描述时,它将是可选项(yourDescription),而不是“yourDescription” 通过使用可选绑定或提供默认值将可选转换为字符串,

我在iPad上运行此代码以创建虚拟外设。
它开始做广告。
我在iPhone上运行central。
中央检测外围设备并连接和订阅。
外围日志在日志中意外地有“可选”,尽管它不在stringFromData中

图中显示了stringFromData内容和日志


stringFromData
是一个
可选的
。当您使用
字符串(description:)
获取
可选项的描述时,它将是
可选项(yourDescription)
,而不是
“yourDescription”

通过使用可选绑定或提供默认值将
可选
转换为
字符串
,可以避免这种情况

let stringFromData = String(data: packet_to_send, encoding: .utf8) ?? ""
os_log("initial packet_to_send %d bytes = '%s'.", packet_to_send.count, stringFromData)

stringFromData
是一个
可选的
。当您使用
字符串(description:)
获取
可选项的描述时,它将是
可选项(yourDescription)
,而不是
“yourDescription”

通过使用可选绑定或提供默认值将
可选
转换为
字符串
,可以避免这种情况

let stringFromData = String(data: packet_to_send, encoding: .utf8) ?? ""
os_log("initial packet_to_send %d bytes = '%s'.", packet_to_send.count, stringFromData)

因为并非所有数据都可以使用UTF8编码转换为字符串。只要尝试使用UTF8将JPG转换为字符串,您就会看到。在您的情况下,您不应该有问题,但编译器无法猜测。所以
stringFromData
是可选的,否?因为并非所有数据都可以使用UTF8编码转换为字符串。只要尝试使用UTF8将JPG转换为字符串,您就会看到。在您的情况下,您不应该有问题,但编译器无法猜测。所以
stringFromData
是可选的,不是吗?