2016-10-21 26 views
9

Kod tabanımı xCode kullanarak 3.0'a taşımaya çalışıyorum. Anlayamadığım birkaç konu var.Swift 3.0 geçiş hatası: 'IndexPath' olmayan 'TypePath' tipine kısıtlanmış 'Element' yazın

Sayı: bu kadar hata gezinme panelinin sol tarafında ise Type 'Element' constrained to non-protocol type 'IndexPath'

enter image description here

sadece hatalar aşağıda gösterilmektedir. Hangi kod satırı veya kod dalının hataya neden olduğunu anlayamıyorum.

enter image description here

kimse bana bu lütfen çözmeye yardımcı olabilir.

UPDATE

Çok fazla uğraştıktan sonra bu sorunlara takıldım.

UPDATE

enter image description here

Yardımlarınız için teşekkür ederiz. Şimdi sadece aşağıdaki sorunları yaşadım. Size azı

enter image description here

kaynak kodunu göndermek için soruyorsunuz ama Xcode sayfalarında uyarı veya hata her türlü göstermedi. hızlı 3'te birkaç jenerik

private extension Array where Element: IndexPath { 

    func indexOf(_ indexPath: IndexPath) -> Int { 
     var counter = 0 
     for object in self { 
      if object.section == indexPath.section && object.row == indexPath.row { 
       return counter 
      } 
      counter += 1 
     } 
     return 0 
    } 
} 


fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool { 
    switch (lhs, rhs) { 
    case let (l?, r?): 
    return l < r 
    case (nil, _?): 
    return true 
    default: 
    return false 
    } 
} 
+2

payı hiçbir hata veya uyarı gösteren vardır hangi dosyada, bu konuyu – Wolverine

+0

karşı karşıya kod satırı: bir protokol, gibi bir şey oluşturmak yoluyla bu sorunu karıştırabilirsiniz. –

+0

@Wolverine lütfen güncellenmiş soruya bakın. –

cevap

40

bir jenerik çünkü sadece IndexPath bir protokol olmadığı için o kadar extension Array where Element: IndexPath { çalışmayacaktır Uzantınızı sınırlamak için protokoller kullanabilirsiniz vardır. hızlı 3.1 Bunda

(here bakınız) değişiyor böylece biraz daha farklı bir söz dizimi ile belirli bir türünü kullanmak mümkün olacak: size daha sonra henüz

extension Array where Element == IndexPath { 

Eğer hızlı 3.1 taşımak yapamıyorsanız

protocol Indexable { 
    var row: Int { get } 
    var section: Int { get } 
} 

extension IndexPath: Indexable {} 

extension Array where Element: Indexable { 
    ... 
+0

Teşekkürler kardeşim .. beni kurtardın ....:) –

+0

Henüz Swift 3.1 güncellemek mümkün mü? –

+0

Kendi sorumu yanıtlama (evet!): Https://www.hackingwithswift.com/example-code/language/how-to-install-a-beta-version-of-swift –