I have just updated to Xcode 9 and converted my app from swift 3 to swift 4. I have graphs which use strings to label the axes and other variables. So I have a moneyAxisString = "Money". Previously I was able to draw them using this code:
moneyAxisString.draw(in: CGRect(x: CGFloat(coordinateXOriginLT + axisLength/3), y: CGFloat(coordinateYOriginRT + axisLength + 5 * unitDim), width: CGFloat(300 * unitDim), height: CGFloat(100 * unitDim)), withAttributes: attributes as? [String : AnyObject])
Where attributes is a dictionary defined as follows
attributes = [
NSAttributedStringKey.foregroundColor: fieldColor,
NSAttributedStringKey.font: fieldFont!,
NSAttributedStringKey.paragraphStyle: style
]
Now my app won't compile and I am getting the message:
Cannot convert value of type '[String : AnyObject]?' to expected argument type '[NSAttributedStringKey : Any]?'
It's a type mismatch: [String : AnyObject]
is clearly not [NSAttributedStringKey : Any]
⌥-click on NSAttributedStringKey
to see the declaration.
The solution is to declare attributes
as
var attributes = [NSAttributedStringKey : Any]()
to remove the down cast
..., withAttributes: attributes)
and to write simply
attributes = [.foregroundColor: fieldColor,
.font: fieldFont!,
.paragraphStyle: style]