switch语句出了错-快速的语言

Ken*_*yVB 2 switch-statement swift

在Obj-c中,我做了一个switch语句,我曾经使用UIsplitviewcontroller在iPad版应用程序中移动,现在我想快速执行相同操作...我尝试了几个小时,现在我唯一没有做过的事情能够尝试的是代码,因为它无论如何都会说某种编译错误,这就是我在Obj-c中得到的

-(void)initialSite:(int)viewId {
UIViewController *viewController;
switch (viewId) {
    case 0:{
        viewController = self.initital;
        NSString *star = [NSString stringWithFormat:@"Velkommen til %@'s  Bog",[data valueForKey:@"navn"]];
        self.navigationItem.title = star;}
        break;
    case 1:{
        viewController = self.startSide;
        NSString *start = [NSString stringWithFormat:@"%@'s  Bog, start-side",[data valueForKey:@"navn"]];
        self.navigationItem.title = start;}
        break;
}
[self showChildViewController:viewController];

}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我很快想到的。对此我仍然很陌生,要理解它也有些困难,即使我有快速的编程语言书

这是我到目前为止迅速得到的

    let viewController = UIViewController()
switch viewController {
case "initial":
let initial : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc0 : UIViewController = initial.instantiateViewControllerWithIdentifier("initial") as UIViewController
self.presentViewController(vc0, animated: true, completion: nil)
let rowData: NSDictionary = self.menuItemArray[indexPath.row] as NSDictionary!
self.navigation.title = rowData["navn"] as? String

case "startSide":
let startSide : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc1 : UIViewController = startSide.instantiateViewControllerWithIdentifier("startSide") as UIViewController
let rowData: NSDictionary = self.manuItemArray[indexPath.row] as NSDictionary!
self.presentViewController(vc1, animated: true, completion: nil)
self.navigation.title = rowData["navn"] as? String
default:


}
Run Code Online (Sandbox Code Playgroud)

错误是:用let viewController = UIViewcontroller()在行中的 预期声明

Eri*_*rik 5

让我们从您的Obj-C实现开始:

-(void)initialSite:(int)viewId 
{
    UIViewController *viewController;
    switch (viewId) 
    {
        case 0:
        {
            viewController = self.initital;
            NSString *star = [NSString stringWithFormat:@"Velkommen til %@'s  Bog",[data valueForKey:@"navn"]];
            self.navigationItem.title = star;
        }
        break;
        case 1:
        {
            viewController = self.startSide;
            NSString *start = [NSString stringWithFormat:@"%@'s  Bog, start-side",[data valueForKey:@"navn"]];
            self.navigationItem.title = start;
        }
        break;
    }

    [self showChildViewController:viewController];
}
Run Code Online (Sandbox Code Playgroud)

现在,Swift中的相同代码段:

func initialSite(viewID:Int)
{
    var viewController : UIViewController?

    switch (viewID)
    {
        case 0:
            viewController = self.initial
            let navn = self.data["navn"] as? String
            let star = "Velkommen til \(navn)'s Bog"
            self.navigationItem.title = star

        case 1:
            viewController = self.startSide
            let navn = self.data["navn"] as? String
            let star = "\(navn)'s Bog, start-side"
            self.navigationItem.title = star

        default:
            viewController = nil
            // do nothing
    }

    self.showChildViewController(viewController)
}
Run Code Online (Sandbox Code Playgroud)

您要记住的主要是与varvs 的区别let。通常,您将使用let来创建事物,除非这些事物以后会更改其值(使用)var。

另一件事是使用带有?后缀的Optionals。这是值可以是nil(未设置)的情况,否则它必须包含一个值。