2015-04-29 22 views
13

聽起來很可笑,但我無法修復這段代碼:無論不能援引「過濾器」類型的參數列表「((_) - > _)」

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

我怎麼寫關閉我總是得到這樣的錯誤:

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

runningScripts這樣定義:

var runningScripts = [ScriptRunner]() 

ScriptRunner是一個Swift類(不從NSObject繼承)

我在許多其他地方使用幾乎一樣沒有問題。有什麼建議麼?

回答

7

你可以得到這個錯誤,如果你沒有做ScriptRunner符合Equatable

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 
} 
+0

...或者你可以把它NSObject的子類(符合'Equatable')。那一刻才發現。無論如何,謝謝! (其實我想用'!=='...) – idmean

+1

我會小心使用'NSObject'技術。它使得'=='的行爲更像'===',除非你用更合乎邏輯的東西來重寫'isEqual'(或者自己實現'==',在這種情況下,只需符合'Equatable')就更簡單了。 – Rob

+0

感謝您的警告。我剛剛意識到寫了評論後,這就是爲什麼我添加了「*實際上我想用==!*」 – idmean

1

我需要一個明確的投這樣的:

@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!! 
     } 
    } 
相關問題