2015-01-05 4 views
0

Нужна помощь при переводе кода в Swift.Swift: Syntax Translation

Objective-C код (Работает отлично):

- (UIViewController *)getViewControllerFromStoryboard:(NSString *)storyboardName sceneName:(NSString*)sceneName iconName:(NSString*)icon title:(NSString*)title 
{ 
    UIStoryboard *sb = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; 
    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:sceneName]; 
    UIImage *tabIcon = [UIImage imageNamed:icon]; 

    vc.tabBarItem = [[UITabBarItem alloc] initWithTitle:title image:tabIcon selectedImage:nil]; 
    vc.title = NSLocalizedString(title,nil); 

    return vc; 
} 

Перевод Свифта:

func getViewControllerFromStoryBoar(storyboardName: String, sceneName: String, iconName: String, title: String) -> UIViewController{ 
    let sb : UIStoryboard = UIStoryboard(name: storyboardName, bundle: nil) 
    let vc = sb.instantiateViewControllerWithIdentifier(sceneName) //Warning A 
    let tabIcon : UIImage = UIImage(named: iconName)! 
    vc.tabBarItem = UITabBarItem(initWithTitle:title, image:tabIcon) //Error A 
    vc.title = title //Error B 

    return vc as UIViewController 

} 

Предупреждение: '! AnyObject' Constant 'Vc' вывод иметь тип, который может быть неожиданным Почему «AnyObject!» ? Это, кажется, исправить ошибку

Ошибка A: Невозможно присвоить «tabBarItem» в «ВХ»

Ошибка B: Невозможно присвоить «название» в «ВХ»

Я не Не понимаю две ошибки выше.

ответ

1

Ошибка A: Невозможно присвоить 'tabBarItem' в 'ВХ'

Ошибка B: Невозможно присвоить 'название' в 'ВХ'

Поскольку instantiateViewControllerWithIdentifier возвращает AnyObject. Это предупреждение предупредило вас! Вы должны были обратить внимание на это предупреждение. (Вы заставили замолчать предупреждение, это было неправильное дело. Не замораживайте его: прослушать.)

Вам необходимо указать эту ссылку, прежде чем сможете с ней работать. Я знаю вы знаете, что это UIViewController, но Swift этого не знает; вам нужно бросить и рассказать об этом.

let vc = sb.instantiateViewControllerWithIdentifier(sceneName) as UIViewController 

Это решит все это за один ход.