这是我的代码.它使用的CBUUID是Core Bluetooth.我们假设演员阵容v有效.
import UIKit
import CoreBluetooth
func convert(v: AnyObject) -> [String: String] {
return (v as! [CBUUID: NSData]).map { (uuid, data) in
(uuid.UUIDString, NSString(data: data, encoding: NSUTF8StringEncoding) ?? "")
}
}
Run Code Online (Sandbox Code Playgroud)
我们的想法是通过调用得到字典的字符串表示CBUUID.UUIDString的CBUUID,并通过调用适当NSString的构造函数NSData.
我已将字典转换为特定类型.为什么我在这里得到"模糊的参考成员'地图'"?
错误消息具有误导性.真正的问题是map()
应用于字典的方法不会返回新的字典而是返回一个数组,在您的情况下[(String, String)],请参阅例如,在Swift中将map()应用于字典的最简洁方法是什么?讨论该主题.
另一个问题是NSString没有String
隐式转换,即NSString(data: data, ...)应该被替换
String(data: data, ...).
使用扩展方法
extension Dictionary {
init(_ pairs: [Element]) {
self.init()
for (k, v) in pairs {
self[k] = v
}
}
}
Run Code Online (Sandbox Code Playgroud)
从引用的线程中,您可以返回一个新的字典
func convert(v: AnyObject) -> [String: String] {
let dict = v as! [CBUUID: NSData]
return Dictionary(dict.map { (uuid, data) in
(uuid.UUIDString, String(data: data, encoding: NSUTF8StringEncoding) ?? "")
})
}
Run Code Online (Sandbox Code Playgroud)
或者,将返回类型更改为[(String, String)]:
func convert(v: AnyObject) -> [(String, String)] {
return (v as! [CBUUID: NSData]).map { (uuid, data) in
(uuid.UUIDString, String(data: data, encoding: NSUTF8StringEncoding) ?? "")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4275 次 |
| 最近记录: |