Ошибка Swift: '&' используется с аргументом non-inout типа 'UnsafeMutablePointer'
Я пытаюсь преобразовать следующий код Objective C ( источник) из этого
-(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)
'&' используется с аргументом non-inout типа 'UnsafeMutablePointer'
Xcode предлагает исправить это, удалив &
, Когда я это делаю, я получаю ошибку
Невозможно преобразовать значение типа 'CGFloat' в ожидаемый тип аргумента 'UnsafeMutablePointer'
В документации по взаимодействию с C API используются &
синтаксис, поэтому я не вижу, в чем проблема. Как я могу исправить эту ошибку?
1 ответ
ascent
а также descent
должны быть переменными, чтобы быть переданными как аргументы in-out с &
:
var ascent: CGFloat = 0
var descent: CGFloat = 0
let line: CTLineRef = CTLineCreateWithAttributedString(asp)
let width = CGFloat(CTLineGetTypographicBounds(line, &ascent, &descent, nil))
По возвращении из CTLineGetTypographicBounds()
эти переменные будут установлены на подъем и спуск по линии. Также обратите внимание, что эта функция возвращает Double
так что вы захотите преобразовать это в CGFloat
,