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ır. SDK'nın 3.x sürümlerinde GMSPlaceField NS_ENUM olarak bulunur ve hâlâ desteklenmektedir.

  • Objective-C kullanıyorsanız: Bu değişiklikten etkilenmezsiniz. GMSPlaceField'ü eskisi gibi kullanmaya devam edebilirsiniz.

  • Swift kullanıyorsanız: SDK'nın eski sürümleri isteğe bağlı GMSPlaceField? olarak döndürdüğü oluşturucu olarak GMSPlaceField(rawValue:) söz dizimini kullanıyorsanız uygulamanız bozulur. 4.0.0 ve sonraki sürümler isteğe bağlı olmayan bir GMSPlaceField değeri döndürür; isteğe bağlı öğe üzerinde yapılan koşullu kontroller veya zorunlu sarma açma işlemleri başarısız olur. Ayrıca, GMSPlaceField'leri birleştirmek için artık dizi söz dizimini kullanabilirsiniz.

Kodunuzu taşıma

Belirli koşullu sarma açma veya zorla sarma açma söz dizimi Swift'te çalışmaz. Aşağıdaki örneklerde bu sorunların nasıl düzeltileceği gösterilmektedir. Ayrıca, GMSPlaceField değerini tanımlamak için dizi söz dizimini kullanma gösterilmektedir:

Koşullu sarmalama açma

Aşağıdaki örnekteki ifadede, koşullu sarma açma gerektiren bir GMSPlaceField dizisi oluşturmak için if kullanılmaktadır. Bu, derleyici hatasına neden olur ("Koşullu bağlama için başlatıcının türü GMSPlaceField değil, İsteğe Bağlı olmalıdır").

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

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

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

Burada gösterildiği gibi dizi söz dizimini de kullanabilirsiniz:

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

Sarmalama açma işlemini zorlama

Aşağıdaki örnekte, GMSPlaceField türünü isteğe bağlı olmayan bir tür olarak kullanma gösterilmektedir. Bu işlem, derleyici hatasına ("İsteğe bağlı olmayan GMSPlaceField türündeki değerin sarmalanması zorlanamaz.") neden olur:

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

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

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

Burada gösterildiği gibi dizi söz dizimini de kullanabilirsiniz:

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