Vor einiger Zeit stieß ich auf einen Blogbeitrag von Natascha the Robot über die Konfiguration einer Konstante mit Shorthand Argument Names in Swift. Das ist an sich schon ein toller Beitrag, aber am meisten inspiriert hat mich die Then-Bibliothek, die am Ende ihres Beitrags erwähnt wird. Zu sehen, wie eine so kleine Menge an Code die Art und Weise, wie wir Konstanten überall konfigurieren, verändern kann, brachte mich auf die Idee, etwas ganz Ähnliches zu schaffen. Aber anstatt eine Variable zu konfigurieren, wird sie verwendet, um eine Variable auf der Grundlage einer Bedingung zu filtern. Denn warum sollte ein Filter nur auf Sammlungsarten anwendbar sein?
Die Anwendung ist extrem einfach und sehr nützlich:
Erweiterung String: Filter {}
"12345".filter { $0.characters.count > 4 } // Optional("12345")
"12".filter { $0.Zeichen.Anzahl > 4 } // Optional(null)
Es ist nur sehr wenig Code erforderlich, damit dies funktioniert:
Erweiterung Filter {
/// Ermöglicht das Filtern von Nicht-Sequenztypen.
///
/// let label = UILabel().then {
/// $0.textAlignment = .Center
/// $0.textColor = UIColor.blackColor()
/// $0.text = "Hallo, Welt!"
/// }
public func filter(@noescape condition: Self -> Bool) -> Selbst? {
return condition(self) ? self : nil
}
}
Erweiterung NSObject: Filter {}
Meiner Meinung nach nicht genug Code, um daraus eine Bibliothek zu machen. Kopieren Sie diesen Code einfach in Ihr Projekt. Ich habe eine GitHub Gist erstellt, die ich bei Bedarf aktualisieren werde.
Mit diesem Code funktioniert jedes Objekt, das von NSObject erbt, standardmäßig. Bei reinen Swift-Objekten fügen Sie einfach den One-Liner hinzu, damit sich das Objekt an das Filter-Protokoll hält.
Ich würde mich freuen, Ihre Kommentare zu hören und von Alternativen zu hören.
Verfasst von

Lammert Westerhoff
Contact



