core text - Issue with CoreText CTFrameGetLineOrigins in Swift -
i have next code working in objective-c
nsarray *lines = (nsarray *)ctframegetlines((__bridge ctframeref)columnframe); cgpoint origins[[lines count]]; ctframegetlineorigins((__bridge ctframeref)columnframe, cfrangemake(0, 0), origins); but when ported swift, compiler complains cannot convert expression´s ´void´to type ´cmutablepointer<cgpoint> in ctframegetlineorigins line
let nslinesarray: nsarray = ctframegetlines(ctframe) // utilize nsarray bridge array allow ctlinesarray = nslinesarray array var originsarray: array<cgpoint> = cgpoint[]() //var originsarray: nsmutablearray = nsmutablearray.array() allow range: cfrange = cfrangemake(0, 0) ctframegetlineorigins(ctframe, range, originsarray) i had utilize nsarray in cgframegetlines function, , convert swift array, , inspecting ctlinesarray, shows ctline objects retrieved correctly
i tried using nsmutablearray originsarray, same result.
any thought of missing?
you have add together address-of operator & pass pointer start of originsarray function:
ctframegetlineorigins(ctframe, range, &originsarray) reference: interacting c apis in "using swift cocoa , objective-c" book:
c mutable pointers
when function declared taking cmutablepointer<type> argument, can take of following:
type[] value, passed pointer start of array, , lifetime-extended duration of call. and expressions in "the swift programming language" book:
in add-on standard library operators listed above, utilize & before name of variable that’s beingness passed in-out argument function phone call expression.
an add-on (as @eharo2 figured out), originsarray must have room necessary number of elements, can achieved with
var originsarray = cgpoint[](count:ctlinesarray.count, repeatedvalue: cgpointzero) swift core-text
No comments:
Post a Comment