Verwandte implizite Ausdrücke in Swift 5.4

In Swift 5.4: Implizite Ausdrücke für Klassenmitglieder (auch als "Punktsyntax" bezeichnet) können jetzt auch beim Zugriff auf eine Eigenschaft oder Methode als Ergebnis eines solchen Ausdrucks verwendet werden, solange der endgültige Rückgabetyp gleich bleibt.





Bitte beachten Sie, dass sich Swift 5.4 zum Zeitpunkt dieses Schreibens als Teil von Xcode 12.5 im Beta-Test befindet .





In der Praxis bedeutet dies, dass wir beim Erstellen eines Objekts oder Werts mithilfe einer statischen API oder beim Zugriff auf einen Aufzählungstyp jetzt direkt eine Methode oder Eigenschaft für diese Klasseninstanz aufrufen können und der Compiler immer noch auf diesen Typ schließen kann beziehen sich auf.





Wenn Sie beispielsweise eine UIColor mithilfe einer der im System bereitgestellten integrierten statischen APIs instanziieren , können Sie die Alpha-Komponente dieser Farbe jetzt problemlos ändern, ohne explizit auf die UIColor selbst verweisen zu müssen, z. B .:





// In Swift 5.3 and earlier, an explicit type reference is always
// required when dealing with chained expressions:
let view = UIView()
view.backgroundColor = UIColor.blue.withAlphaComponent(0.5)
...

// In Swift 5.4, the type of our expression can now be inferred:
let view = UIView()
view.backgroundColor = .blue.withAlphaComponent(0.5)
...
      
      



, API, , UIColor, :





extension UIColor {
    static var chiliRed: UIColor {
        UIColor(red: 0.89, green: 0.24, blue: 0.16, alpha: 1)
    }
}

let view = UIView()
view.backgroundColor = .chiliRed.withAlphaComponent(0.5)
...
      
      



, , API. , « API Swift» API, , , :





extension ImageFilter {
    static var dramatic: Self {
        ImageFilter(
            name: "Dramatic",
            icon: .drama,
            transforms: [
                .portrait(withZoomMultipler: 2.1),
                .contrastBoost,
                .grayScale(withBrightness: .dark)
            ]
        )
    }
}
      
      



Swift 5.4 ( ) - , ImageFilter, .transforms:





extension ImageFilter {
    func combined(with filter: Self) -> Self {
        var newFilter = self
        newFilter.transforms += filter.transforms
        return newFilter
    }
}
      
      



, . , .





let filtered = image.withFilter(.dramatic.combined(with: .invert))
      
      



! , API- , , , .








All Articles