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
表示。
违规元素是
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
表示。