swift - titel - wordpress title startseite




Wie macht man eine optionale Schließung in swift? (3)

Ich versuche ein Argument in Swift zu deklarieren, das eine optionale Sperrung erfordert. Die Funktion, die ich deklariert habe, sieht so aus:

class Promise {

 func then(onFulfilled: ()->(), onReject: ()->()?){       
    if let callableRjector = onReject {
      // do stuff! 
    }
 }

}

Aber Swift beschwert sich darüber, dass "Gebundener Wert in einem Bedingungsfall ein optionaler Typ sein muss", wobei "wenn lassen" deklariert wird.


Da ich davon ausgehe, dass diese "optionale" Sperrung einfach nichts machen soll, könnten Sie einen Parameter mit einem leeren Closure als Standardwert verwenden:

func then(onFulfilled: ()->(), onReject: ()->() = {}){       
    // now you can call your closures
    onFulfilled()
    onReject()
}

Diese Funktion kann jetzt mit oder ohne den onReject Callback onReject

then({ ... })
then({ ... }, onReject: { ... })

Keine Notwendigkeit für Swifts großartige Optionals? Hier!


Sie sollten den optionalen Verschluss in Klammern einschließen. Dies wird den ? Operator.

func then(onFulfilled: ()->(), onReject: (()->())?){       
    if let callableRjector = onReject {
      // do stuff! 
    }
 }

Vielleicht ist es ein sauberer Weg. Besonders wenn der Verschluss komplizierte Parameter hat.

typealias SimpleCallBack = () -> ()

class Promise {

func then(onFulfilled: SimpleCallBack, onReject: SimpleCallBack?){       
    if let callableRjector = onReject {
        // do stuff! 
    }
}

}




optional-parameters