web-dev-qa-db-ja.com

タイプ '[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()
}
20
Fawwad Ahmed

これはSwift 4.の新しい機能です。文字列識別子や辞書キーを取得するすべてのCocoaメソッドは、キーに対して独自のタイプを持ちます。これは、型の安全性—古い体制では、誤ってString定数を他のAPIで使用することを意図していましたが、Swift 4、これにより、コンパイルエラーが発生します。

メソッドのシグネチャを次のように変更します。

open class func drawText(context: CGContext, text: String, point: CGPoint,
    align: NSTextAlignment, attributes: [NSAttributedString.Key : Any]?)

編集: Swift 4.2用に更新されました!NSAttributedStringKeyNSAttributedString.Keyに名前が変更されました。

28
Charles Srstka

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]?)
5
Tamás Sengel