UICollectionReusableView - 函数中缺少 return

UICollectionReusableView - Missing return in a function

我在考虑 UICollectionView 的 header 时遇到了一个奇怪的问题 运行。

我基本上使用了以下代码: 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 包用于测试目的时,它告诉我

Missing return in a function expected to return 'UICollectionReusableView'

好的,到目前为止一切顺利,switch-case 之外没有任何东西,所以它 return 什么都没有 - 但为什么只有当我尝试时它才不会在 "hot deploy" 上发出任何警告构建一个包?

assert() 仅在调试配置中评估。当你建造 存档然后代码在发布配置中编译 (通过优化)并且条件被简单地忽略(假设 true)。因此编译器抱怨缺少 return 值。

您可以使用

fatalError("Unexpected element kind")

相反。 fatalError() 始终被评估并被标记 使用 @noreturn(resp. return 在 Swift 3 中键入 Never)以便编译器知道它不会 return 给它的调用者。

另见 Swift - fatalError with Switch Statements