2016-09-28 5 views
1

次の行は、私のコンパイラエラーを与えている「一般的なパラメータ 『をKeyType』を推論することができませんでした」:NSMapTable「『をKeyType』ジェネリックパラメータ推測することができませんでした」

fileprivate var delegatesMap = NSMapTable.strongToWeakObjects() 

は私が言って、より明示的なことを試みました:私は、Xcodeは私がこれを固定行くにはどうすればよい

を「キー」を

fileprivate var delegatesMap:MapTable<Key,Value> = NSMapTable.strongToWeakObjects() 

しかし、認識しませんか?あなたはこのような何かを書く必要があり、私はString型であることに私のキーをしたいと思いますし、タイプMenuActionDelegate(クラスプロトコル)であることが私の価値

+0

ないだけスウィフトが、また、私は、あなたが使用したいキータイプ何が表示されません。 NSMapTableのKeyTypeとValueTypeとしてどのようなタイプを使用しますか? – OOPer

+0

キーに文字列を使用し、値が –

+0

の "MenuActionDelegate"というプロトコルを使用したい場合は、そのような情報を質問に含める方が良いでしょう。私は短い答えを書くつもりです。 – OOPer

答えて

0

EDIT

fileprivate var delegatesMap = NSMapTable<NSString, MenuActionDelegate>.strongToWeakObjects() 

KeyTypeValueTypeAnyObjectである必要がありますので、直接Stringを入力することはできません。また、明示的なキャストas NSStringも必要です。

値タイプMenuActionDelegateには@objc -protocolが必要です。

var delegatesMap = NSMapTable<NSString, AnyObject>.strongToWeakObjects() 

をとしてそれを使用します: さもないと、あなたがこのような何かを書く必要があるかもしれ

let theDelegate = delegatesMap.object(forKey: "delegateName" as NSString) as! MenuActionDelegate 
+0

これはクラスプロトコルですが、 "AnyAttribute 'に対処する具体的な型としてMenuActionDelegateがサポートされていません"というエラーが表示されます。 –

+0

@FaisalSyed、申し訳ありませんが、クラスプロトコルのチェックを忘れました。 '@ objc'プロトコルを変更できますか? – OOPer

+0

私はそれをすることはできません。 NSStringとして明示的なキャストをどのくらい正確に追加するのですか?いくつかの方法を試しましたが、正しく実行できませんでした。 –

関連する問題