Невозможно преобразовать значение типа '[String: AnyObject]?' к ожидаемому типу аргументов '[NSAttributedStringKey: Any]?'
Как преобразовать значения типа '[String : AnyObject]?'
в ожидаемый тип аргумента '[NSAttributedStringKey : Any]?'
?
open class func drawText(context: CGContext, text: String, point: CGPoint,
align: NSTextAlignment, attributes: [String : AnyObject]?)
{
var point = point
if align == .center
{
point.x -= text.size(withAttributes: attributes).width / 2.0
}
else if align == .right
{
point.x -= text.size(withAttributes: attributes).width
}
NSUIGraphicsPushContext(context)
(text as NSString).draw(at: point, withAttributes: attributes)
NSUIGraphicsPopContext()
}
Ответы
Ответ 1
Это новая функция Swift 4. Все методы Cocoa, которые принимают строковые идентификаторы и/или словарные ключи, теперь имеют свои собственные типы для ключей. Причина этого заключается в том, чтобы добавить немного безопасности типа - в старый режим, можно было случайно передать константу String
по ошибке, которая должна была использоваться с каким-то другим API, но теперь в Swift 4 это будет приводят к ошибке компиляции.
Измените свою подпись метода на:
open class func drawText(context: CGContext, text: String, point: CGPoint, align: NSTextAlignment, attributes: [NSAttributedStringKey : Any]?)
Ответ 2
Ваш аргумент atrribute
неверен в функции drawText
.
Изменить
open class func drawText(context: CGContext, text: String, point: CGPoint, align: NSTextAlignment, attributes: [String : AnyObject]?)
к
open class func drawText(context: CGContext, text: String, point: CGPoint, align: NSTextAlignment, attributes: [NSAttributedStringKey : Any]?)
Ответ 3
Это модуль диаграмм. Я столкнулся с той же проблемой.
Изменение аргумента метода устраняет ошибку в этом методе, но вызывает проблему до всех вызывающих элементов этого метода, которые теперь имеют одинаковую проблему.
Есть ли быстрое исправление, которое не связано с изменением всего стека вызовов?