Merhabalar bu yazımda kısa süre önce betadan çıkıp kararlı sürüme kavuşan Swift 4.1 ile gelen bazı değişim ve yeniliklerden bahsedeceğim.
Swift dilide günler ilerledikçe gelişmekte ve yeni sürümleri ile programlama yapısını daha efektif, temiz ve hızlı hale getirmekte. Bu biz geliştiriciler için çok yararlı bir durum. Bu gelişmeler ile birlikte haziran ayı içerisinde gerçekleşecek WWDC 18 etkinliğinde dilin yeniliklerle dolu yeni sürümü Swift 5 ve iOS 12 ‘de görücüye çıkmış olacak.
Aşağıda örneklerine yer verdiğim bazı gelişmeleri görebilirsiniz.
Bunlardan ilki flatMap yerini compactMap fonksiyonuna bıraktı. Böylelikle kolay bir şekilde string dizi içerisinden Int nesneleri ayrıştırabiliriz.
let objArr = ["A","B","1","2","3","4","C"] let numbers = objArr.compactMap {Int($0)} numbers // 1,2,3,4
Diğer bir yenilikte protocol içerisinde tekrar aynı protocol nesnesini recursive olarak kullanabilmekteyiz. Buda bize ilişkili sınıflar ve alt sınıflarda kodun daha okunaklı ve işlevsel olmasını kolaylaştırmakta.
protocol Employee { associatedtype Manager: Employee var manager: Manager? { get set } } class BoardMember: Employee { var manager: BoardMember? } class SeniorDeveloper: Employee { var manager: BoardMember? } class JuniorDeveloper: Employee { var manager: SeniorDeveloper? }
Bunun yanı sıra diğer bir protocol yeniliklerinden getirilen şartlı uyumlar. Belirtilen protocol eklenmiş ise geçerli olup çalıştırılabilen methodlar oldu.
protocol Purchaseable { func buy() } struct Items: Purchaseable { func buy() { print("Bought item!") } } extension Array: Purchaseable where Element: Purchaseable { func buy() { for item in self { item.buy() } } } let items = [Items(),Items(),Items()] items.buy()
Diğer bir yenilikte Equatable protocolunun ortak bir şekilde tüm yapılarda daha okunaklı eşitleme işlemi gerçekleştirmesi.
struct User:Equatable { var nick: String var city: String var age: Int var gender: String static func ==(lhs: User, rhs: User) -> Bool { return lhs.nick == rhs.nick } } let usr = User(nick: "uikenan", city: "San Francisco", age: 23, gender: "Male") let usr_2 = User(nick: "abcde", city: "İstanbul", age: 37, gender: "Male") usr == usr_2 // false
Diğer güzel bir eklemede simulator ve cihaza göre kod bloğu yazabilir hale gelmemiz.
#if targetEnvironment(simulator) // code simulator #else // code device #endif
Bu yazı yorumlara kapalı.