Как вы удовлетворяете аргумент «lineOrigins» в CTFrameGetLineOrigins() в Swift?

Я пытаюсь выяснить CTFrameGetLineOrigins отсюда: CTFrameGetLineOrigins Got Incorrect Origins и пытаюсь преобразовать ObjC для Swift.

Объект-C:

CFArrayRef lines = CTFrameGetLines(frame);
size_t numOfLines = CFArrayGetCount(lines);
CGPoint lineOrigins[numOfLines];
CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), lineOrigins);

Быстрый:

let lines = CTFrameGetLines(frame)
let numOfLines: size_t = CFArrayGetCount(lines)
let lineOrigins = [CGPoint](repeating: CGPoint.zero, count: numOfLines)
CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), lineOrigins)

Но я получаю сообщение об ошибке для третьего параметра CTFrameGetLineOrigins:
Не удается преобразовать значение типа '[CGPoint]' в ожидаемый тип аргумента 'UnsafeMutablePointer'

Как мне обойти эту ошибку?


person Kevin Wang    schedule 13.09.2018    source источник


Ответы (2)


На самом деле я просто добавил & к параметру и сделал константу переменной.

let lines = CTFrameGetLines(frame)
let numOfLines: size_t = CFArrayGetCount(lines)
var lineOrigins = [CGPoint](repeating: CGPoint.zero, count: numOfLines)
CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), &lineOrigins)
person Kevin Wang    schedule 13.09.2018

Ты можешь попробовать

CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), UnsafeMutablePointer(&lineOrigins))

или напрямую

CTFrameGetLineOrigins(frame, CFRangeMake(0, 0),&lineOrigins)
person Sh_Khan    schedule 13.09.2018
comment
Ах да, я только что обнаружил это. UnsafeMutablePointer() также кажется необязательным. - person Kevin Wang; 13.09.2018