2016-11-24 19 views
5

bu derlemeye deneyin her zaman değerini dönüştürülemez, hatası alıyorum devam ediyor ve çözümler aramak için çalıştım ama yardımcı görünüyordu hiçbir şey bulamadım. İşte benim kod:tip beklenen argüman türüne '[T]' '[_]'

class FetchRequest <T: NSManagedObject>: NSFetchRequest<NSFetchRequestResult> { 
     init(entity: NSEntityDescription) { 
     super.init() 
     self.entity = entity 
    } 
    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
    typealias FetchResult = (success: Bool, objects: [T], error: NSError?) 
    func fetch <T> (request: FetchRequest<T>, 
        context: NSManagedObjectContext) -> FetchResult { 
     do { 
     let results = try context.fetch(request) 
      return FetchResult(true, results as! [T], nil) 
     } catch let error as NSError { 
     return (false, [], error) 
     } 
    } 
} 

DÜZENLEME:

return FetchResult(true, results as! [T], nil) 
+0

Lütfen daha fazla bilgi verin: hatayı nereden alıyorsunuz? Kodunuzu, hatayı gösteren minimal bir örneğe indirebilir misiniz? – Tali

+0

Bitti, dosyada hatanın nerede olduğunu belirtmek için bir düzenleme ekledim. Bunun için üzgünüm. – Nick

+0

Neden 'fetch' * instance * yönteminiz' request: 'parametresini alıyor? Neden kendini kullanmıyorsun? – Hamish

cevap

3

sorun iki genel yer tutucu tipleri T denilen olmasıdır:

bu satırda hata alıyorum. Biri sınıf kapsamı, biri yöntem kapsamında. senin fetch yöntemi türünü döndürür senin FetchResult tip-takma kullanılan sınıf kapsamı T, ilgisi yoktur - Eğer results as! [T] derken, yönteme kapsamı en T başvuruyorsunuz.

Şimdi
func fetch(inContext context: NSManagedObjectContext) -> FetchResult { 
    do { 
     let results = try context.fetch(self) 
     return (true, results as! [T], nil) 
    } catch let error as NSError { 
     return (false, [], error) 
    } 
} 

sadece basitçe üzerinde fetch(inContext:) çağırabilirsiniz:

nedenle sadece, henüz tutucuları birini veya daha iyi adlandırmak yönteminden görünüşte gereksiz request: parametreyi ortadan kaldırmak ve sadece yerine self kullanmak gerekir Getirmek istediğiniz FetchRequest örneği.

İlgili konular