WedX - журнал о программировании и компьютерных науках

Унарный оператор «~» не может быть применен к операнду типа «MyType».

У меня есть код, который сломался после перехода на Swift 2.0. Теперь я получаю ошибку в названии вопроса.

message.flags = NSNumber(integer:(MCOMessageFlag(rawValue: message.flags.integerValue).intersect(~MCOMessageFlag.Seen)).rawValue)

MyType — это битовая маска. Есть идеи, что изменилось в Swift, чтобы теперь это вызывало ошибку?

Редактировать:

    typedef NS_OPTIONS(NSInteger, MCOMessageFlag) {
    MCOMessageFlagNone          = 0,
    /** Seen/Read flag.*/
    MCOMessageFlagSeen          = 1 << 0,
    /** Replied/Answered flag.*/
    MCOMessageFlagAnswered      = 1 << 1,
    /** Flagged/Starred flag.*/
    MCOMessageFlagFlagged       = 1 << 2,
    /** Deleted flag.*/
    MCOMessageFlagDeleted       = 1 << 3,
    /** Draft flag.*/
    MCOMessageFlagDraft         = 1 << 4,
    /** $MDNSent flag.*/
    MCOMessageFlagMDNSent       = 1 << 5,
    /** $Forwarded flag.*/
    MCOMessageFlagForwarded     = 1 << 6,
    /** $SubmitPending flag.*/
    MCOMessageFlagSubmitPending = 1 << 7,
    /** $Submitted flag.*/
    MCOMessageFlagSubmitted     = 1 << 8,
};
10.09.2015

  • Вы можете опубликовать код для MyType? 10.09.2015
  • Извините, приятель, я не понимаю, как вы используете ~MyType.Value и откуда берется функция .intersect(). Можете ли вы описать ошибку, которую вы получаете? 10.09.2015
  • Извиняюсь. Например, MyType.Value — это MCOMessageFlag.Seen. Ошибка: «Унарный оператор ~ не может быть применен к операнду типа MCOMessageFlag». .intersect() — это функция из Swift OptionSetType. Код работал отлично, пока я не мигрировал, и, похоже, это снова проблема, связанная с битовой маской. 10.09.2015
  • Является ли MyType таким же, как MCOMessageFlag? Что такое myObject и myObject.prop? Пожалуйста, покажите полный автономный пример. 10.09.2015
  • Проблема связана с оператором ~. Я не верю, что это допустимый оператор в swift, и, честно говоря, я никогда не использовал его в Obj-C, поэтому я даже не уверен, что он делает! 10.09.2015
  • @DannyBravo Нет проблем, спасибо. Я выложил полный код, Мартин. 10.09.2015
  • @DannyBravo Это побитовый оператор not, так как это в C и Objective C. 10.09.2015

Ответы:


1

Учитывая, что вы все равно хотите получить целое число:

myObject.prop = NSNumber(integer:
    myObject.prop.integerValue & ~MCOMessageFlag.Seen.rawValue)

Или, может быть, это было бы яснее для вашего конкретного случая:

if myObject.prop.integerValue == MCOMessageFlag.Seen.rawValue {
    myObject.prop = NSNumber(integer: MCOMessageFlag.None.rawValue)
}
10.09.2015

2

Хотя ответ Роба сработал, я подумал, что тоже должен опубликовать это. Я также разместил вопрос на форумах разработчиков Apple и получил ответ от Криса Латтнера.

Начиная с swift 2, наборы опций теперь похожи на наборы, что означает, что вы не можете инвертировать их с помощью ~

Так что вместо intersect() я могу использовать subtractInPlace().

11.09.2015
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]