Expressions implicites associées dans Swift 5.4

Dans Swift 5.4: Les expressions implicites pour les membres de classe (également connues sous le nom de «syntaxe de point») peuvent désormais être utilisées même lors de l'accès à une propriété ou une méthode à la suite d'une telle expression, tant que le type de retour final reste le même.





Veuillez noter qu'au moment d'écrire ces lignes, Swift 5.4 est en test bêta dans le cadre de Xcode 12.5 .





En pratique, cela signifie que chaque fois que nous créons un objet ou une valeur à l'aide d'une API statique, ou lors de l'accès à un type énuméré, nous pouvons maintenant appeler directement une méthode ou une propriété sur cette instance de classe, et le compilateur peut toujours déduire ce type. Ce que nous font référence à.





Par exemple, lors de l'instanciation d'un UIColor à l' aide de l'une des API statiques intégrées fournies dans le cadre du système, nous pouvons maintenant facilement changer le composant alpha de cette couleur sans avoir à référencer explicitement l' UIColor lui-même dans des situations telles que:





// 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