2015-11-21 3 views
2

Вот мой код. Он использует CBUUID, который является базовым 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) ?? "") 
    } 
} 

Идея заключается в том, чтобы получить строковое представление словаря по телефону CBUUID.UUIDString для CBUUID и вызвать соответствующий NSString конструктор NSData.

Я применил словарь к определенному типу. Почему я получаю "неоднозначная ссылка на 'карту' ' здесь?

ответ

4

Сообщение об ошибке вводит в заблуждение. Реальная проблема заключается в том, что метод , примененный к словарю, не возвращает новый словарь, но массив в вашем случае [(String, String)], См., Например, What's the cleanest way of applying map() to a dictionary in Swift? для обсуждения этой темы.

Другая проблема заключается в том, что NSString не преобразуется в String неявно, т.е. NSString(data: data, ...) должен быть заменен String(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)]:

func convert(v: AnyObject) -> [(String, String)] { 
    return (v as! [CBUUID: NSData]).map { (uuid, data) in 
     (uuid.UUIDString, String(data: data, encoding: NSUTF8StringEncoding) ?? "") 
    } 
} 
+0

Спасибо. Я бы предпочел не использовать расширение словаря, и вместо этого я могу использовать '(String, String)'. Поэтому я просто попытался изменить возвращаемый тип функции, но он все равно возвращает ту же ошибку. Любые указания? – Ana