0

Yalnızca .ModularLarge cihazım kullanıldığında, Complication and Time Travel mükemmel bir şekilde çalıştı.Çoklu Komplikasyon Aileleri için Zaman Çizelgesi Girişleri

Bir seçenek olarak .ModularSmall eklemek istedim, bu nedenle kodumu birkaç farklı şekilde değiştirmeyi denedim, ancak artık beklendiği gibi çalışmıyor.

Şimdi ne oluyor? Time Travel, getTimelineEntriesForComplication'dan üretilen dizideki ilk giriş için çalışacak, ancak Sonraki Yolculuk yaparken sonraki girişler hiçbir zaman görünmeyecek, bu yüzden, Komplikasyon sadece ilk girişte kalıyor. Zaman Çizelgesi

if deyimi kullanarak çalıştı:

func getTimelineEntriesForComplication(complication: CLKComplication, afterDate date: NSDate, limit: Int, withHandler handler: (([CLKComplicationTimelineEntry]?) -> Void)) { 

    guard let headers = headerArray, texts = body1Array, dates = body2Array else { return } 

    var entries = [CLKComplicationTimelineEntry]() 
    for (index, header) in headers.enumerate() { 
     let text = texts[index] 
     let date1 = dates[index] 
     let headerTextProvider = CLKSimpleTextProvider(text: header as! String) 
     let body1TextProvider = CLKSimpleTextProvider(text: text as! String) 
     let timeTextProvider = CLKTimeTextProvider(date: date1 as! NSDate) 
     let template = CLKComplicationTemplateModularLargeStandardBody() 
     let template2 = CLKComplicationTemplateModularSmallStackText() 
     template.headerTextProvider = headerTextProvider 
     template.body1TextProvider = body1TextProvider 
     template2.line1TextProvider = headerTextProvider 
     template2.line2TextProvider = body1TextProvider 
     template.body2TextProvider = timeTextProvider 

     if complication.family == .ModularLarge { 
      let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template) 
      entries.append(timelineEntry) 
      handler(entries) 
     } 
     if complication.family == .ModularSmall { 
      let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template2) 
      entries.append(timelineEntry) 
      handler(entries) 
     } 
     else { 
      handler(nil) 
     } 
    } 
} 

cevap

1

Ne oluyor Zamanda Yolculuk getTimelineEntriesForComplication üretilen dizideki ilk giriş için çalışacak, ama Zaman yaparken sonraki girişleri hiçbir zaman görünmez Seyahat, bu yüzden Komplikasyon sadece ilk girişte kalır.

getTimelineEntriesForComplication kodunuzda bir hata var.

for (index, header) in headers.enumerate() { 
    if complication.family == .ModularLarge { 
     let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template) 
     entries.append(timelineEntry) 
     handler(entries) 
    } 
} 

yeniden yapılandırılması şöyle görünecek şekilde kodunuzu:

for (index, header) in headers.enumerate() { 
    if complication.family == .ModularLarge { 
     let timelineEntry = CLKComplicationTimelineEntry(date: date1 as! NSDate, complicationTemplate: template) 
     entries.append(timelineEntry) 
    } 
} 
handler(entries) 
+0

Kod çalışır, ancak sadece ilgili görüşlerinizi merak for döngüsü iç döndü çünkü yalnızca bir giriş içeren bir dizi iade If if ifadesi veya 'case switch' yöntemlerde kullanmak daha iyidir. Ve eğer 'eğer' seçeneğini seçecekseniz, sadece 'if' kullanır mıydınız yoksa 'eğer' kullanır mıydınız? – victorpulak

+1

Şahsen, anahtar ifadesinin okunması ve bakımı daha kolay olduğunu ve bunun için daha fazla kod güvenliği sağladığını düşünüyorum. 'If' blokları ile daha fazla hata olabilir. –

İlgili konular