2017-09-21 2 views
10

私はこのプロジェクトをSwift 4に変換しようとしました。 私はこの行のエラーを持っている:プロジェクトをSwiftに変換するときに「フィルタ」をあいまいに使用する4

return Forum.threads?.filter({ //... }) 

エラーは言う:

この候補(Swift.Set)

見つかり

'フィルタ' のあいまいな使用

この候補者を見つけた(Swift.Sequence)

threadsオブジェクトがForumに、このように実装されています

var threads: Set<Thread>? 

これを解決するために、どのように..?あなたの助けのおかげ

EDIT:ログにエラーを明らかにしたときに、ここで候補者は次のとおりです。

Swift.Set:369:17: note: found this candidate 
    public func filter(_ isIncluded: (Set.Element) throws -> Bool) rethrows -> Set<Element> 
       ^
Swift.Sequence:35:17: note: found this candidate 
    public func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element] 
+0

オプションをアンラップすると同じエラーが表示されますか? – Sparky

+0

はい私はそれを試してこのエラーを受け続ける – Someday

+1

単純な 'letスレッド:セット? = Set(); let filtered = threads?.filter {$ 0.isMainThread} 'は私のXcode 9でコンパイルされるので、自己完結型の再現可能な例が役に立ちます。 –

答えて

9

これを解決するには、変数の型を宣言します。

let x: [Character] = input.filter{/**/} 
return x 

これは、フィルタ{}メソッドの戻り値の型を曖昧にします。

+2

素晴らしい作品です。一時変数を必要としない場合、 '(input.filter {/ ** /}を[Character]として)もう一つの方法があります。 –

0

ここで、一般的な問題があるようです。例えば、これはUITextViewの拡張メソッドです。

ambiguous filter

あなたはforループのように書き換えることによってそれを丸める作業することができます。 (申し訳ありませんが、素晴らしい解決策ではありませんが、少なくとも動作します)

関連する問題