2015-04-29 18 views
13

saçma gelebilir, ama bu kod parçası düzeltmek edemiyorum: nasıl olursa olsuntüründe bir argüman listesi '((_) -> _)' ile 'filtreyi' çağırmak Can not

self.runningScripts.filter({ $0 != scriptRunner }) 

Ben

Cannot invoke 'filter' with an argument list of type ' ((_) -> _) '

runningScripts böyle tanımlanır::

var runningScripts = [ScriptRunner]() 

vekapatma yazma her zaman bu hatayı alıyorumbir Swift sınıfıdır (NSObject öğesinden devralınmaz)

Neredeyse başka birçok yerde sorunsuz kullanıyorum. Baska öneri? Böyle açık döküm gerekli

class ScriptRunner : Equatable { 
    // the rest of your implementation here 
} 

func ==(lhs: ScriptRunner, rhs: ScriptRunner) -> Bool { 
    return ... // change this to whatever test that satisfies that lhs and rhs are equal 
} 

cevap

7

Eğer Equatable için ScriptRunner uygun yapmadığını eğer o hatayı alabilirsiniz

@NSManaged private var storage: [String] 
    private var objects: Set<String>? 
    func remove(element:String) { 
     initSetIfNeeded() 
     if(objects!.contains(element)) { 
      objects!.remove(element) 
      storage = storage.filter({($0 as NSObject) !== (element as NSObject)}) // Explicit cast here!! 
     } 
    } 
+0

... ya bunu bir yapabilirsiniz NSObject alt sınıfı ('Equatable' ile uyumludur). Sadece bu anı buldum. Neyse, teşekkürler! (Ve aslında ben! == '...) – idmean

+1

kullanmak istedim' NSObject' tekniğine dikkat ediyorum. '==', 'isEqual'ı geçersiz kılan bir şeyle (veya '==' kendiniz uygularsanız,' Equatable 'seçeneğine daha basittir)' === 'gibi daha fazla davranır. – Rob

+0

Uyarı için teşekkürler. Ben sadece yorum yazdıktan sonra, "* Ve aslında ben kullanmak istedim! == ... *" – idmean

1

:

İlgili konular