Почему Self.self печатает себя

#swift

Вопрос:

У меня есть этот код в настраиваемом представлении:

 class AView: UIView {
   
   func setup {
       Bundle.main.loadNibNamed("(Self.self)", owner: self, options: nil)
   }
   
}
 

Я ожидал , что это загрузит имя файла с наконечником AView , в режиме отладки он работает без проблем. Но при запуске в режиме выпуска происходит сбой.

Сообщение об ошибке выглядит так:

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: '_TtC10ATPlatformP33_BB740EC0B8824C2F1932C467ED63DEF214LanguageBundle </private/var/containers/Bundle/Application/B0094397-EC2C-4550-8981-0CF2DCFB580C/xxx.app> (loaded)' with name 'Self''
 

Это означает "(Self.self)" возвращаемую Self строку.

Что я понял , так это когда установил Swift Compiler - Code Generation -> > Optimization Level значение [-Onone] , которое работает без сбоев.

Кто — нибудь знает, почему?

Ответ №1:

Это ошибка SR-14564 « "(Self.self)" вызывает проблему в Xcode 12.5 при оптимизации Swift», и она уже исправлена в Swift 5.5. Вероятно, вы используете Xcode 12.5, который использует Swift 5.4. Попробуйте обновить до бета-версии Xcode 13. Вы можете скачать его здесь.

Комментарии:

1. Еще одна интересная вещь заключается в том, что устройство iPad работает нормально, а iPhone-нет. Спасибо.