GMSPlaceField'a NS_OPTIONS olarak taşınıyor

iOS için Yerler SDK'sının 4.0.0 sürümünden itibaren GMSPlaceField türü artık NS_OPTIONS makrosunu kullanıyor. SDK'nın 3.x sürümleri GMSPlaceField olarak NS_ENUM ve hâlâ desteklenmektedir.

  • Objective-C kullanıyorsanız: Herhangi bir etkisi yoktur. GMSPlaceField uygulamasını eskisi gibi kullanmaya devam edebilirsiniz.

  • Swift kullanıyorsanız: Yapılandırıcı olarak GMSPlaceField(rawValue:) söz dizimini kullanıyorsanız uygulamanız bozulur. SDK'nın eski sürümleri, bu söz dizimini isteğe bağlı GMSPlaceField? olarak döndürüyordu. 4.0.0 ve sonraki sürümlerde isteğe bağlı olmayan bir GMSPlaceField değeri döndürülür. İsteğe bağlı olarak gerçekleştirilen işlemler (ör. koşullu kontroller veya zorunlu sarmalama açma) başarısız olur. Ayrıca, artık dizi söz dizimini kullanarak GMSPlaceField'ları birleştirebilirsiniz.

Kodunuzu taşıma

Belirli koşullu sarmalama açma veya zorunlu sarmalama açma söz dizimleri Swift'te bozulur. Aşağıdaki örneklerde bu sorunların nasıl düzeltileceği gösterilmekte ve GMSPlaceField değerini bildirmek için dizi söz diziminin nasıl kullanılacağı açıklanmaktadır:

Koşullu sarmalama açma

Aşağıdaki örnekteki ifadede, koşullu sarmalama açma gerektiren bir if dizisi oluşturmak için GMSPlaceField kullanıldığı gösterilmektedir. Bu durum, derleyici hatasına ("Koşullu bağlama için başlatıcı, GMSPlaceField değil, isteğe bağlı türde olmalıdır.") neden olur.

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

Bu sorunu düzeltmek için if ifadesini aşağıdaki örnekte gösterildiği gibi kaldırın:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something

Dizi söz dizimini de kullanabilirsiniz. Örneğin:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

Sarmalama açmaya zorlama

Aşağıdaki örnekteki ifadede, GMSPlaceField'nın isteğe bağlı olmayan bir tür olarak kullanıldığı gösterilmektedir. Bu durum, derleyici hatasına ("Cannot force unwrap value of non-optional type GMSPlaceField.") neden olur:

// Before.
let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!

Bu sorunu düzeltmek için, burada gösterildiği gibi GMSPlaceField öğesini isteğe bağlı bir tür olarak kullanın:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

Dizi söz dizimini de kullanabilirsiniz. Örneğin:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]