2015-03-19 15 views
12

Miałem dziwny problem z uruchomieniem, biorąc pod uwagę nagłówek UICollectionView.UICollectionReusableView - Brakujący zwrot w funkcji

I w zasadzie stosować kod: 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") 
      } 
    } 

To wszystko działa perfekcyjnie, gdy natychmiast wdrażania albo symulatorze lub rzeczywiste urządzenie, ale dziwnie, kiedy chcę zbudować powołany ad hoc pakiet do testowania cele to mówi mi

Missing zwrotu w funkcji spodziewanego powrotu 'UICollectionReusableView'

Ok do tej pory tak dobrze, nie ma nic poza szafą rozdzielczą, aby nic nie zwróciło - ale dlaczego nie daje żadnych ostrzeżeń na temat "gorącej instalacji" tylko wtedy, gdy próbuję zbudować paczkę?

Odpowiedz

38

assert() jest oceniany tylko w konfiguracji debugowania. Po utworzeniu archiwum, kod jest kompilowany w konfiguracji Release (z optymalizacją), a warunek jest po prostu ignorowany (przyjęto , aby uzyskać true). Dlatego kompilator narzeka na brakującą wartość zwracaną przez .

Można użyć

fatalError("Unexpected element kind") 

zamiast. fatalError() jest zawsze oceniany i dodatkowo oznaczony z @noreturn (lub zwraca typ Never w Swift 3), aby kompilator wiedział, że nie wraca do swojego wywołującego.

Zobacz także Swift - fatalError with Switch Statements.

+0

dzięki za wgląd – longbow

+0

Jesteś wszędzie! Dziękuję za kolejną odpowiedź. :) – Crashalot

+0

DUŻE KOŃCOWE .. –