Expresiones implícitas relacionadas en Swift 5.4

En Swift 5.4: Las expresiones implícitas para miembros de clase (también conocidas como "sintaxis de puntos") ahora se pueden usar incluso cuando se accede a una propiedad o método como resultado de dicha expresión, siempre que el tipo de retorno final siga siendo el mismo.





Tenga en cuenta que en el momento de escribir este artículo, Swift 5.4 se encuentra en prueba beta como parte de Xcode 12.5 .





En la práctica, esto significa que siempre que creamos un objeto o valor usando una API estática, o cuando accedemos a un tipo enumerado, ahora podemos llamar directamente a un método o propiedad en esa instancia de clase, y el compilador aún puede inferir ese tipo. se refieren a.





Por ejemplo, al crear instancias de un UIColor utilizando una de las API estáticas integradas que se proporcionan como parte del sistema, ahora podemos cambiar fácilmente el componente alfa de ese color sin tener que hacer referencia explícita al UIColor en en situaciones como:





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