4

これから次のObjective-Cコード( source)を変換しようとしています

-(CGRect) dimensionsForAttributedString: (NSAttributedString *) asp {

    CGFloat ascent = 0, descent = 0, width = 0;
    CTLineRef line = CTLineCreateWithAttributedString( (CFAttributedStringRef) asp);

    width = CTLineGetTypographicBounds( line, &ascent, &descent, NULL );

    // ...
}

スウィフトに:

func dimensionsForAttributedString(asp: NSAttributedString) -> CGRect {

    let ascent: CGFloat = 0
    let descent: CGFloat = 0
    var width: CGFloat = 0
    let line: CTLineRef = CTLineCreateWithAttributedString(asp)

    width = CTLineGetTypographicBounds(line, &ascent, &descent, nil)

    // ...
}

しかし、次の&ascent行でエラーが発生しています。

width = CTLineGetTypographicBounds(line, &ascent, &descent, nil)

タイプ「UnsafeMutablePointer」の非 inout 引数で使用される「&」

Xcode は、削除して修正することを提案しています&。ただし、それを行うと、エラーが発生します

タイプ「CGFloat」の値を予期される引数タイプ「UnsafeMutablePointer」に変換できません

Interacting with C APIs ドキュメントでは構文が使用されて&いるため、何が問題なのかわかりません。このエラーを修正するにはどうすればよいですか?

4

1 に答える 1

7

ascentとin-out 引数として渡されるためには変数descentでなければなりません:&

var ascent: CGFloat = 0
var descent: CGFloat = 0
let line: CTLineRef = CTLineCreateWithAttributedString(asp)
let width = CGFloat(CTLineGetTypographicBounds(line, &ascent, &descent, nil))

から戻るとCTLineGetTypographicBounds()、これらの変数はラインの上昇と下降に設定されます。また、この関数は を返すDoubleので、それを に変換する必要があることに注意してくださいCGFloat

于 2015-12-12T10:04:09.460 に答える