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 kullanmaktadır. SDK'nın 3.x sürümleri, NS_ENUM olarak GMSPlaceField özelliğine sahiptir ve hâlâ desteklenmektedir.

  • Objective-C kullanıyorsanız bunun herhangi bir etkisi olmaz. GMSPlaceField uygulamasını eskisi gibi kullanmaya devam edebilirsiniz.

  • Swift kullanıyorsanız: Oluşturucu olarak GMSPlaceField(rawValue:) söz dizimini kullanıyorsanız uygulamanız bozulur. Bu söz dizimi, SDK'nın eski sürümlerinin isteğe bağlı GMSPlaceField? olarak döndürür. 4.0.0 ve sonraki sürümler, isteğe bağlı olmayan bir GMSPlaceField değeri döndürür; koşullu kontroller veya sarmalama açmayı zorlama gibi isteğe bağlı işlem üzerinde gerçekleştirilen işlemler başarısız olur. Buna ek olarak artık GMSPlaceField değerlerini birleştirmek için dizi söz dizimini kullanabilirsiniz

Kodunuzu taşıma

Bazı koşullu sarmalama açma veya sarmalanmaya zorlama söz dizimi Swift'te bozulur. Aşağıdaki örnekler, bu sorunların nasıl düzeltileceğini ve GMSPlaceField tanımlamak için dizi söz diziminin nasıl kullanılacağını göstermektedir:

Koşullu sarmalama açma

Aşağıdaki örnekte bulunan ifadede, koşullu sarmalama açma gerektiren bir GMSPlaceField dizisi oluşturmak için if kullanımı gösterilmektedir. Bu işlem bir 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 aşağıda 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çmayı zorla

Aşağıdaki örnekteki ifadede, GMSPlaceField'in isteğe bağlı olmayan bir tür olarak kullanılması gösterilmektedir. Bu, bir derleyici hatasıyla sonuçlanır ("İsteğe bağlı olmayan GMSPlaceField türünde sarmalama açma değeri zorlanamaz."):

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

Bu sorunu düzeltmek için, aşağıda 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]