Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios &引用;“对成员地图的引用不明确”;从混凝土类型_Ios_Swift - Fatal编程技术网

Ios &引用;“对成员地图的引用不明确”;从混凝土类型

Ios &引用;“对成员地图的引用不明确”;从混凝土类型,ios,swift,Ios,Swift,这是我的密码。它使用来自核心蓝牙的CBUUID。让我们假设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: NSUTF8St

这是我的密码。它使用来自核心蓝牙的
CBUUID
。让我们假设
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) ?? "") 
    }
}
其思想是通过为
CBUUID
调用
CBUUID.UUIDString
,并为
NSData
调用相应的
NSString
构造函数来获取字典的字符串表示形式


我已将词典转换为特定类型。为什么我会在这里看到“对成员‘map’的模糊引用”?

错误消息具有误导性。真正的问题是
map()
应用于字典的方法不会返回新字典,而是返回一个数组,在您的示例中是
[(String,String)]
, 有关该主题的讨论,请参见示例

另一个问题是
NSString
未转换为
String
隐式地,即,
NSString(data:data,…)
应替换为
字符串(数据:数据,…)

使用扩展方法

extension Dictionary {
    init(_ pairs: [Element]) {
        self.init()
        for (k, v) in pairs {
            self[k] = v
        }
    }
}
从引用的线程中,您可以返回一个新的字典

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) ?? "") 
    })
}
或者,将返回类型更改为
[(String,String)]


谢谢我不想使用字典扩展名,我可以使用
(String,String)
。所以我只是尝试更改函数返回类型,但它仍然返回相同的错误。有什么指导吗?
func convert(v: AnyObject) -> [(String, String)] {
    return (v as! [CBUUID: NSData]).map { (uuid, data) in
        (uuid.UUIDString, String(data: data, encoding: NSUTF8StringEncoding) ?? "") 
    }
}