UICollectionReusableView - Отсутствует возврат в функции

У меня возникла странная проблема с рассмотрением заголовка UICollectionView.

В основном я использовал код: http://www.raywenderlich.com/78551/beginning-ios-collection-views-swift-part-2

func collectionView(collectionView: UICollectionView,
        viewForSupplementaryElementOfKind kind: String,
        atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

            let dateFormatter = NSDateFormatter()
            dateFormatter.dateFormat = "dd.MM.yyyy' - 'HH:mm'"
            //1
            switch kind {
                //2
            case UICollectionElementKindSectionHeader:
                //3
                let h =
                collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "eventHeaderView", forIndexPath: indexPath) as eventHeader


                h.eventFirstline.text = "First Line"
                h.eventSecondline.text = thisEvent.eventName

                h.eventDate.text = dateFormatter.stringFromDate(thisEvent.startDate)

                h.eventDescription.text = thisEvent.shortDescription

                return h
            default:
                //4
                assert(false, "Unexpected element kind")
            }
    }

Все, что отлично работает при мгновенном развертывании на симуляторе или реальном устройстве, но, как ни странно, когда я хочу создать Ad-Hoc Package для тестирования, он сообщает мне

Отсутствует возврат в функции, которая должна возвращать 'UICollectionReusableView'

Хорошо до сих пор так хорошо, ничего не осталось за пределами корпуса коммутатора, чтобы он ничего не мог вернуть - но почему он не дает никаких предупреждений о "горячем развертывании" только при попытке создать пакет?

Ответ 1

assert() оценивается только в конфигурации Debug. Когда вы строите архив, тогда код компилируется в конфигурации Release (с оптимизацией), и условие просто игнорируется (предполагается true). Поэтому компилятор жалуется на отсутствие возвращаемое значение.

Вы можете использовать

fatalError("Unexpected element kind")

вместо этого. fatalError() всегда оценивается и добавляется дополнительно с @noreturn (соответственно тип возврата Never в Swift 3), чтобы компилятор знал, что он не возвращается к своему вызывающему.

См. также Swift - fatalError с операторами Switch.