Swift 2.0 - İkili Operatör “|” iki UIUserNotificationType işlenenine uygulanamaz


193

Yerel bildirimler için başvurumu bu şekilde kaydetmeye çalışıyorum:

UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))

Xcode 7 ve Swift 2.0'da hata alıyorum Binary Operator "|" cannot be applied to two UIUserNotificationType operands. Lütfen bana yardım et.


2
.: |: Benim için "()" işler UIApplication.sharedApplication () registerUserNotificationSettings (sıfır) UIUserNotificationType.Badge), kategoriler (UIUserNotificationType.Alert UIUserNotificationSettings (forTypes) ile çevreleyen
Nekak Kinich

1
Şimdi var:Could not find an overload '|' that accepts the supplied arguments
Nikita Zernov

Başka bir fikrim yok, üzgünüm.
Nekak Kinich

Yanıtlar:


387

Swift 2'de, genellikle bunu yapacağınız birçok tür OptionSetType protokolüne uyacak şekilde güncelleştirilmiştir. Bu, kullanım için sözdizimi gibi bir diziye izin verir ve Durumunuzda aşağıdakileri kullanabilirsiniz.

let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)

İlgili bir notta, bir seçenek kümesinin belirli bir seçenek içerip içermediğini kontrol etmek istiyorsanız, artık bitsel AND ve sıfır kontrolü kullanmanıza gerek yoktur. Seçenek kümesine, bir dizinin değer içerip içermediğini kontrol ettiğiniz şekilde belirli bir değer içerip içermediğini sorabilirsiniz.

let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge], categories: nil)

if settings.types.contains(.Alert) {
    // stuff
}

In Swift 3 aşağıdaki gibi, numuneler yazılmalıdır:

let settings = UIUserNotificationSettings(types: [.alert, .badge], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)

ve

let settings = UIUserNotificationSettings(types: [.alert, .badge], categories: nil)

if settings.types.contains(.alert) {
    // stuff
}

1
Varsa ne flags |= .Alert? yapabilirsin flags = [flags, .Alert]?
user3246173

Yani bu, değerlerin benzersiz olduğu bir Set olarak mı yoksa yanlış bir nihai değere yol açabilecek bir Dizi olarak mı ele alınır?
user3246173

@ user3246173 flags değişkeninin nasıl bildirildiğine bağlıdır. Bayrağını türünün açıkça ilan edilirse UIUserNotificationType, yani var flags: UIUserNotificationType = [.Alert, .Badge], o zaman bir takım gibi görür ve örnek yöntemler gibi setini kullanarak ya bir öğe ekleyebilir insert(), union(), unionInPlace()veya yineleme endişelenmeden bahsettiği yaklaşımla.
Mick MacCallum

Bayrakları türün olduğunu açıkça bildirmezseniz UIUserNotificationTypeve var flags = [UIUserNotificationType.Alert, UIUserNotificationType.Badge]bildiriminizde olduğu gibi bir şey kullanırsanız , bayrağın türünün [UIUserNotificationType]olduğu anlaşılır ve buna append()veya başka yöntemlerle öğe eklenmesi yinelemelere neden olur. İkincisi durumunda UIUserNotificationType, dizi ile bir örneğini girdi olarak başlatabilirsiniz ve hepsi iyi olacaktır, ancak netlik için set tabanlı yaklaşımı öneriyorum.
Mick MacCallum

35

Aşağıdakileri yazabilirsiniz:

let settings = UIUserNotificationType.Alert.union(UIUserNotificationType.Badge)

9
Çok karmaşık.
geri dönüş

1
vay bu iğrenç görünüyor! NSTrackingAreaOptions.MouseEnteredAndExited.union(NSTrackingAreaOptions.MouseMoved).union(NSTrackingAreaOptions.ActiveAlways), ancak çalışan bir çözüm için teşekkürler
Chad Scira

2
Eğer yanılmıyorsam yazabilirsinizvar options : NSTrackingAreaOptions =[.MouseEnteredAndExited,.MouseMo‌​ved,.ActiveAlways]
Bobj-C

7

Benim için işe yarayan

//This worked
var settings = UIUserNotificationSettings(forTypes: UIUserNotificationType([.Alert, .Badge, .Sound]), categories: nil)

9
neredeyse kabul edilen cevap gibi görünüyor. Yorum olarak düşünün?
Max MacLeod

2

Bu Swift 3'te güncellendi.

        let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        UIApplication.shared.registerUserNotificationSettings(settings)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.