Swift4中SSIDDATA字段无法显示至UITextField问题求助
解决SSIDDATA无法显示在UITextField的问题
问题根源
你日志里看到的<534b5946 37424646>是Data类型的默认打印格式,而iOS的UITextField只能显示String类型内容。直接把Data赋值给文本框的text属性,控件无法解析这种二进制数据,自然就显示不出来。
从日志里的十六进制值也能验证这一点:53 4B 59 46 37 42 46 46对应的ASCII字符正好是SKYF7BFF,和你拿到的SSID字段完全一致,说明这个Data其实就是SSID字符串的UTF-8编码数据。
解决方案:把Data转成String
你需要先将SSIDDATA对应的Data转换为String,再赋值给UITextField。代码示例如下:
// 从字典中取出SSIDDATA并转为Data类型 if let ssidData = SSIDDict["SSIDDATA"] as? Data { // 尝试用UTF-8编码转为字符串(这是SSID的标准编码) if let ssidString = String(data: ssidData, encoding: .utf8) { // 赋值给你的UITextField yourTextField.text = ssidString } else { // 万一UTF-8转码失败, fallback到十六进制字符串显示原始数据 let hexString = ssidData.map { String(format: "%02x", $0) }.joined() yourTextField.text = hexString } }
补充说明
- 绝大多数场景下,SSID的二进制数据都是UTF-8编码的,所以第一种转码方式就能得到和
SSID字段完全一致的字符串。 - 如果遇到特殊编码的SSID(比如包含非UTF-8字符),可以尝试其他编码格式(比如
.ascii或.utf16),或者用十六进制字符串的方式展示原始数据,避免显示空白或乱码。
内容的提问来源于stack exchange,提问作者Harry McGovern
相关产品推荐
相关产品推荐

