In Swift muss ich oft einen Noop-Abschluss zu einer Methode übergeben, nur um die erwarteten Parameter der Methode zu erfüllen (Arity). In den guten alten Tagen von Obj C konnte man nil
für einen Noop-Rückruf passieren und damit fertig sein. Gibt es einen schnelleren, eleganteren Weg, dies in Swift zu tun, ohne einen leeren Block wie unten zu passieren?Elegante Methode, um leere Verschlüsse in Swift zu übergeben
UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (UIAlertAction) -> Void in }) // do nothing in callback
Komplettes Beispiel:
import UIKit
class UIAlertControllerFactory {
class func ok(title: String, message: String) -> UIAlertController {
var alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
var okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (UIAlertAction) -> Void in
})
alertController.addAction(okAction)
return alertController
}
}
Ich schwor nil nicht funktioniert in einem der Betas. Danke, ich mag auch den Ansatz. – dimroc
'Handler' ist vom Typ' ((UIAlertAction!) -> Void)! ', Was bedeutet, dass es sich um eine implizit nicht abgewickelte Option handelt. Deshalb können Sie für diesen Parameter "Null" übergeben. Es ist dokumentiert (siehe meine Antwort für weitere Details). –
Ein '!' - Suffix bedeutet ein 'ImplicitlyUnwrappedOptional', das Apple (in APIs) meistens verwendet, um anzuzeigen, dass sie nicht überprüft haben, ob 'nil' legal ist oder nicht. In iOS 9.0 haben sie den Typ in '((UIAlertAction) -> Void)?' Geändert, was bedeutet, dass sie verifiziert haben, dass "nil" erlaubt ist. –