Я пытаюсь зарегистрировать свое приложение для локальных уведомлений следующим образом:
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))
В Xcode 7 и Swift 2.0 - я получаю ошибку Binary Operator "|" cannot be applied to two UIUserNotificationType operands
. Пожалуйста, помогите мне.
Could not find an overload '|' that accepts the supplied arguments
Ответы:
В Swift 2 многие типы, для которых вы обычно делаете это, были обновлены для соответствия протоколу OptionSetType. Это позволяет использовать массив, подобный синтаксису, и в вашем случае вы можете использовать следующее.
И на заметку, если вы хотите проверить, содержит ли набор опций конкретную опцию, вам больше не нужно использовать побитовое И и нулевую проверку. Вы можете просто спросить набор параметров, содержит ли он определенное значение, так же, как вы проверили бы, содержит ли массив значение.
В Swift 3 образцы должны быть записаны следующим образом:
и
источник
flags |= .Alert?
Можете ли вы использоватьflags = [flags, .Alert]
?UIUserNotificationType
, то естьvar flags: UIUserNotificationType = [.Alert, .Badge]
, то он будет рассматриваться как набор, и вы могли бы добавить элемент , либо с помощью набора методов экземпляра нравитсяinsert()
,union()
,unionInPlace()
или с подходом , который вы упомянули , не заботясь о дубликатах.UIUserNotificationType
и используете что-то похожееvar flags = [UIUserNotificationType.Alert, UIUserNotificationType.Badge]
в своем объявлении, тогда будет выведен тип флага[UIUserNotificationType]
, и добавление к нему элементов с помощьюappend()
или других методов приведет к дублированию. В последнем случае вы можете просто инициализировать экземплярUIUserNotificationType
массива в качестве входных данных, и все будет хорошо, но я рекомендую подход на основе множеств для ясности.Вы можете написать следующее:
источник
NSTrackingAreaOptions.MouseEnteredAndExited.union(NSTrackingAreaOptions.MouseMoved).union(NSTrackingAreaOptions.ActiveAlways)
, но спасибо за рабочее решениеvar options : NSTrackingAreaOptions =[.MouseEnteredAndExited,.MouseMoved,.ActiveAlways]
Что сработало для меня
источник
Это было обновлено в Swift 3.
источник