Я пишу PDF-парсер в Swift, и я достиг точки, где я получаю все данные шрифта с функцией обратного вызова (CGPDFDictionaryApplyFunction), функция getFont предполагается заполнять словарь шрифтов в классе PDFFontCollection. Внутри функции обратного вызова getFont переменная коллекции правильно заполнена - однако, когда обратный вызов завершен, в словаре шрифтов по-прежнему есть 0 записей.Словарь Swift не хочет заполняться из C Функция обратного вызова
class PDFFontCollection{
var fonts: [AnyHashable:Any]!
init(page: CGPDFPage){
fonts = [AnyHashable:Any]()
let fontsdict = self.findFontDictionary(page: page)
if(fontsdict != nil){
CGPDFDictionaryApplyFunction(fontsdict!, self.getFont , &self.fonts)
}
}
private var getFont: CGPDFDictionaryApplierFunction = { (key, object, info) in
var collection = info?.assumingMemoryBound(to: [AnyHashable: Any].self).pointee
var name = String(cString: key, encoding: String.Encoding.ascii)
var dict: CGPDFDictionaryRef?
if (CGPDFObjectGetValue(object, .dictionary, &dict)){
var font = PDFFont.pdfFont(withFontDictionary: dict!)
collection?.updateValue(font!, forKey: name!)
}
}
Был на этом месте уже 3 часа ... Все еще не понял, что не так –
Вы когда-нибудь слышали, что Swift 'Dictionary' является типом значений? – OOPer
Да, но не указывается, что я передаю его по ссылке? –