2016-09-28 2 views
1

다음 줄이 나에게 컴파일러 오류를주고있다 "일반 매개 변수 '에 KeyType'는 추론 할 수 없습니다":NSMapTable " '에 KeyType'일반 매개 변수를 추정 할 수없는"

fileprivate var delegatesMap = NSMapTable.strongToWeakObjects() 

내가 말함으로써 더 명시되는 시도 :

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

하지만 그때 엑스 코드는

가 어떻게이 문제를 해결 가야합니까 "키"를 인식하지 못하는 이유는 무엇입니까?

편집 : 나는 String 형식으로 내 키 싶다, 나의 가치는 유형 MenuActionDelegate (클래스 프로토콜)의 수

+0

아니에만 스위프트, 또한 내가 사용하려는 키 타입 무엇을 볼 수 없습니다. NSMapTable에 대해 KeyType과 ValueType으로 어떤 유형을 사용 하시겠습니까? – OOPer

+0

키에 문자열을 사용하고 "MenuActionDelegate"프로토콜을 –

+0

값으로 사용하려는 경우 해당 종류의 정보를 질문에 포함하는 것이 더 낫습니다. 나는 짧은 대답을 쓸 것이다. – OOPer

답변

0

당신은이 같은 작성할 필요가 있습니다

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

클래스 프로토콜이지만 " 'AnyObject'프로토콜을 지원하는 구체적인 유형의 MenuActionDelegate가 지원되지 않습니다." –

+0

@FaisalSyed, 죄송합니다. 클래스 프로토콜을 확인하지 못했습니다. '@ objc'- 프로토콜을 바꿀 수 있습니까? – OOPer

+0

나는 그것을 할 수 없다. 얼마나 정확하게 NSString으로 명시 적 캐스팅을 추가할까요? 몇 가지 방법을 시도했지만 제대로 할 수 없었습니다 –

관련 문제