2016-02-03 3 views
0

Попытка порт Objective-c для Swift, и я довольно новичок в Swift. Я добавил мостовой заголовок и включил в него все необходимые заголовки. В моем Свифта классе мне нужно использовать следующий протокол ниже:Как сопоставить типы данных в протоколе Objective-c to Swift?

@protocol MyProtocolDelegate 

- (void)doSomeStuff:(NSDictionary *)stuff; 

@end 

В моем Свифта классе у меня есть следующий код:

func doSomeStuff(stuff:Dictionary<String,String>) 
{ 
... 
} 

я получаю ошибку здесь:

class ViewController: UIViewController,MyProtocolDelegate <-- Type ViewController doesn't conform to protocol MyProtocolDelegate 

Любые идеи, почему я получаю эту ошибку?

Любая помощь очень ценится!

+0

попробуйте заменить 'Dictionary ' с '[String, String]' или добавить '@ ObjC' – Tj3n

+0

УРА!!! Я догадался! stuff: [NSObject: AnyObject]!) ... Я уже пробовал AnyObject, но без! ... UGH! –

ответ

2

Как вы обнаружили, простой NSDictionary * соединен с мостом до [NSObject: AnyObject]!.

Чтобы получить Dictionary<String,String>, вы должны объявить его в Objective-C, как

- (void)doSomeStuff:(nonnull NSDictionary<NSString *, NSString *> *)stuff; 
1
func doSomeStuff(stuff: NSDictionary) 

Вам не нужно указывать тип, если вы этого не хотите.

+0

Это не работает по какой-то причине, это сработало (материал: [NSObject: AnyObject]!) –

+0

Это странное поведение, необходимо указать тип, чтобы распознать параметр словаря, также вижу, что вы разворачивая его, вы не должны этого делать. –

Смежные вопросы