Di Swift 5.4: Ekspresi implisit untuk anggota kelas (juga dikenal sebagai "sintaks titik") sekarang dapat digunakan bahkan saat mengakses properti atau metode sebagai hasil dari ekspresi tersebut, selama tipe hasil akhir tetap sama.
Harap dicatat bahwa pada saat penulisan ini, Swift 5.4 sedang dalam pengujian beta sebagai bagian dari Xcode 12.5 . |
Dalam praktiknya, ini berarti bahwa setiap kali kita membuat objek atau nilai menggunakan API statis, atau saat mengakses tipe enumerasi, sekarang kita bisa langsung memanggil metode atau properti pada instance kelas itu, dan compiler masih bisa menyimpulkan tipe itu. mengacu pada.
Misalnya, saat membuat instance UIColor menggunakan salah satu API statis bawaan yang disediakan sebagai bagian dari sistem, sekarang kita dapat dengan mudah mengubah komponen alfa dari warna tersebut tanpa harus secara eksplisit mereferensikan UIColor itu sendiri dalam situasi seperti:
// 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- , , , .