ios - Objective-C pointer and swift -


i'm following apple document, unfortunately examples written on objective-c, have confidence swift language , can not understand meaning of things, in particular, in example:

void runloopsourcesperformroutine (void *info){     runloopsource*  obj = (runloopsource*)info;     [obj sourcefired]; } 

this line: runloopsource* obj = (runloopsource*)info;

the parameter: void *info indicates info pointer void, can put address of type of data structure, following various apple documents saw translation of : void *info swift language :

info: unsafemutablerawpointer? 

now, runloopsource* obj = (runloopsource*)info; line indicates obj variable of type: runloopsource, , assigned value of (runloopsource *) info, precisely mean statement? : (runloopsource *) info, , how translates in swift language ?

what dealing (void *info) c pointer-to-void, arrives swift form of unsaferawpointer. means type info has been cast away , memory being managed elsewhere.

in order work thing believe be, i.e. runloopsource, need characterize explicitly runloopsource. in c, cast, in example code posted: (runloopsource*)info. in swift, rebind.

observe in case whole thing has been made little more complicated fact unsafemutablerawpointer has been wrapped in optional, , have unwrapped before can @ all.

assuming, then, in case, info unsafemutablerawpointer? bound runloopsource, can say:

let rlsptr = info!.assumingmemorybound(to: runloopsource.self) let rls = rlsptr.pointee 

now rls is runloopsource , can work like. keep in mind, however, memory unmanaged, should work here , now.

edit way, apple has nice document on entire matter: https://swift.org/migration-guide/se-0107-migrate.html


Comments

Popular posts from this blog

python - How to insert QWidgets in the middle of a Layout? -

python - serve multiple gunicorn django instances under nginx ubuntu -

module - Prestashop displayPaymentReturn hook url -