String 数组的一个元素不会打印到 Swift4 中的 UITextField 中。转换为任何或字符串

One element of String array won't print into UITextField in Swift4. Casting to Any or String

违规元素是

let mSSIDDATA = SSIDDict["SSIDDATA"]

字段。如果我保持原样,它会打印到日志 window,如此处所示。

Looking up SSID info for en0 SSIDDict Values: ["SSID": SKYF7BFF, "BSSID": 7c:4c:a5:c:8b:15, "SSIDDATA": <534b5946 37424646>]

mSSID: SKYF7BFF

mBSSID: 7c:4c:a5:c:8b:15

mSSIDDATA: <534b5946 37424646>

SSID: SKYF7BFF

BSSID: 7c:4c:a5:c:8b:15

SSIDDATA: <534b5946 37424646>

=========

但是 - 它不会打印到 iOS 界面中的 UITextField。其他两个有,但是第三个没有,我不明白为什么。? 如果我将 [String : Any] 更改为 [String : AnyObject],它会创建另一组警告和错误。

所以基本上,我如何将 mSSIDDATA 转换为 UITextField 可以处理的字符串?

            guard let SSIDDict: [String : Any]  = (unwrappedCFDictionaryForInterface as NSDictionary) as? [String: AnyObject] else {
            print("System error: interface information is not a string-keyed dictionary")
            return false
        }
        print("SSIDDict Values: \(SSIDDict)")
        let mSSID = SSIDDict["SSID"] as? String
        let mBSSID = SSIDDict["BSSID"] as? String
        let mSSIDDATA = SSIDDict["SSIDDATA"] //as? String

        print("mSSID: \(mSSID ?? "")")
        vSSID.text = mSSID
        print("mBSSID: \(mBSSID ?? "")")
        vBSSID.text = mBSSID
        print("mSSIDDATA: \(mSSIDDATA ?? "")")
        vSSIDDATA.text = mSSIDDATA as? String

        for d in SSIDDict.keys {
            print("\(d): \(SSIDDict[d]!)")
        }



    }
    return true
}

您的“SSIDDATA”很可能是 od Data 类型 - 您需要将其转换为 String。您可以在 String 上使用 init(data:encoding:) 美元来实现此目的。

顾名思义mSSIDDATA,输出<...>表示值的类型是Data

if let mSSIDDATA = SSIDDict["SSIDDATA"] as? Data {
    print(String(data: mSSIDDATA, encoding : .utf8)!) // SKYF7BFF
}

实际上它是 mSSID 字符串值的 Data 表示。