How to pass a Swift array to an Objective-C function -


i'd pass array of cgpoint values objective-c function.

swift:

var mypoints:[cgpoints]? = [cgpoint(x: 0, y:0)] objcwrapper.callsomething(&mypoints) 

objective-c

+ (void) callsomething: (cgpoint []) points {...} 

error got:

cannot invoke 'callsomething' argument list of type 'inout [cgpoint]?)' 

the problem you’ve made mypoints optional, i.e. [cgpoint]? instead of [cgpoint]. code snippet, it’s not clear why you’re doing this. if there’s not need wider context, drop ? , code should compile.

note, if objcwrapper.callsomething function wrote , control, consider making take const cgpoint [] instead if doesn’t need change values in array. way, won’t inout won’t need & in front of mypoints, , use if it’s declared let, i.e.:

// no need give type, can inferred [cgpoint] let mypoints = [cgpoint(x: 0, y:0)] objcwrapper.callsomething(mypoints) 

if declare as:

+ (void) callsomething: (const cgpoint []) points {...} 

if on other hand needs optional array reasons not shown, you’ll have use unwrapping technique underlying pointer instead of using implicit interop support:

let mypoints: [cgpoint]? = [cgpoint(x: 0, y:0)] mypoints?.withunsafebufferpointer { buf->void in     objcwrapper.callsomething(buf.baseaddress) } 

or, if can’t change callsomething take const array, gets quite annoying:

var mypoints: [cgpoint]? = [cgpoint(x: 0, y:0)] mypoints?.withunsafemutablebufferpointer {   (inout buf: unsafemutablebufferpointer)->void in     objcwrapper.callsomething(buf.baseaddress) } 

Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - .htaccess mod_rewrite for dynamic url which has domain names -

Website Login Issue developed in magento -