No Swift 5.4: expressões implícitas para membros de classe (também conhecidas como "sintaxe de ponto") agora podem ser usadas mesmo ao acessar uma propriedade ou método como resultado de tal expressão, desde que o tipo de retorno final permaneça o mesmo.
Observe que, no momento da redação deste artigo, o Swift 5.4 está em teste beta como parte do Xcode 12.5 . |
Na prática, isso significa que sempre que criamos um objeto ou valor usando uma API estática, ou ao acessar um tipo enumerado, podemos agora chamar diretamente um método ou propriedade nessa instância de classe, e o compilador ainda pode inferir esse tipo. estão se referindo.
Por exemplo, ao instanciar um UIColor usando uma das APIs estáticas integradas fornecidas como parte do sistema, agora podemos alterar facilmente o componente alfa dessa cor sem ter que referenciar explicitamente o próprio UIColor em situações 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- , , , .