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.