具体类型的"对成员地图的模糊引用"

Ana*_*Ana 3 ios swift

这是我的代码.它使用的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.UUIDStringCBUUID,并通过调用适当NSString的构造函数NSData.

我已将字典转换为特定类型.为什么我在这里得到"模糊的参考成员'地图'"

Mar*_*n R 5

错误消息具有误导性.真正的问题是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)