parameters with optional closures in swift -


i'm using optional closures, can't find way pass on parameter. searched everywhere, tried suggestions, can't work.

my code:

func doalert(title: string     , message: string     , actions: string     , sender: anyobject?     , ctlr : uiviewcontroller     , seguestring: string?     , yesclosure: ()->() = {}     , noclosure: ()->() = {}     , startclosure: ()->() = {}     , endclosure: ()->() = {}     ) {  if (actions.rangeofstring("ok") != nil {         alert.addaction(uialertaction(title: "ok", style: .default ) { action -> void in             endclosure()             })} } // end function 

i want add closure ok, 'self' parameter needed.

something below:

    // add func doalert:      , okclosure: (anyobject)->() = {}               // add action ok (before endclosure:              okclosure(sender!) 

getting error on first line: anyobject not subtype of ()

if leave anyobject out of first line, getting error: cannot convert expression's type 'anyobject' type '() => ()'

all other trials give me similar 'tuple' errors. how code passing of parameters in optional closures in code?

firstly, use closures argument function, should declare them so:

func myfunc(closure: (int) -> void) {     // can call closure so:     let myint = 10     closure(myint) } 

(as pointed out @airspeed velocity, parenthesis around int not strictly required because there 1 argument. whether include them personal preference)

secondly, can modify previous function include optional closure, follows: (note ? , parenthesis around closure indicate closure optional, not return type)

func myfunc(closure: ((int) -> void)?) {     // when calling closure need make sure it's not nil.     // example:     closure?(10) } 

thirdly, add default value of nil, looks you're trying = {} on end of yesclosure: ()->() = {}, do:

func myfunc(closure: ((int) -> void)? = nil) {     // still need make sure it's not nil.     if let c = closure {         c(10)     } } 

finally, note, can set names of arguments of closure, can make easier identify you're passing closure when calling it. example:

(note - here parenthesis required around value: int)

func myfunc(closure: ((value: int) -> void)) {     closure(value: 10) } 

even more finally, use typealias. according documentation:

a type alias declaration introduces named alias of existing type program.

here's example of how use closure:

typealias myclosuretype = () -> void  func myfunc(closure: myclosuretype) {     closure() } 

hope helps!


Popular posts from this blog