如何从另一个文档调用函数/无法打开 Optional.none

Posted

技术标签:

【中文标题】如何从另一个文档调用函数/无法打开 Optional.none【英文标题】:how to call a func from another document/ Can't unwrap Optional.none 【发布时间】:2014-06-11 13:53:43 【问题描述】:

在 Obj-c 中,我有一个很好的方式来控制 UISplitViewController 中的 didSelectRow 我可以轻松添加更多按钮并编写它们应该如何工作。意思是去什么故事板并找到那里的场景并将其展示给用户。很快,我在做同样的事情时遇到了一些困难。

这是我在 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];



-(void)showChildViewController:(UIViewController*)content 
if(topController != content) 
    content.view.frame = [self.view bounds];
    content.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    [content.view removeFromSuperview];
    [self.view addSubview:content.view];
    content.view.autoresizesSubviews=YES;
    [content didMoveToParentViewController:self];

    topController = content;


现在在 Swift 中,我做了同样的事情。我认为它有效。

    func initialSite(viewID:Int)

    var viewController : UIViewController?
    switch (viewID)
        
    case 0:
        viewController = self.vc0
        let star = "Velkommen til \(data1)'s Bog"
        self.navigationItem.title = star
    case 1:
        viewController = self.vc1
        let star = "\(data1)'s Bog, start-side"
        self.navigationItem.title = star

    default:
        viewController = nil
        // do nothing
    

    self.showChildViewController(viewController!)

func showChildViewController(content:UIViewController)
        if(topController != content) 
            content.view.frame = self.view.bounds
            content.view.autoresizingMask = UIViewAutoresizing.FlexibleWidth
            content.view.removeFromSuperview()
            self.view.addSubview(content.view)
            content.view.autoresizesSubviews = true
            content.didMoveToParentViewController(self)
            topController = content;
    

我们称之为 detailViewContainerController.swift。

在我的 hovedMenu.swift 中,我需要在 didSelectRow 中调用 func initialSite 我试着解决了一点但总是相同的答案“无法打开 Optional.none

var dvcc: detailViewContainerController!
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) 
    println("You selected cell #\(indexPath.row)!")
    if let row = indexPath?.row 
        self.dvcc.initialSite(Int())
    


我的错误在哪里?我尝试使用停止点。它停在 self.dvcc.initialSite(Int()) 所以它一定有问题。我错过了什么......

【问题讨论】:

【参考方案1】:

你没有给dvcc赋值,所以基本上是nil,Swift解包失败。

你应该试试var dvcc = detailViewContainerController(),而不是var dvcc: detailViewContainerController!

【讨论】:

给我一个错误 = detailViewContainerController is notconstructible with () detailViewContainerController的init方法有哪些? var dvcc: detailViewContainerController! 不,这一行只相当于objc中的detailViewContainerController * dvcc;,你应该做的是相当于dvcc = [detailViewContainerController new]。当你输入var dvcc = detailViewContainerController( 时,xCode 应该尝试自动完成,不是吗? 当我到达(甚至在操场上也没有)时什么都没有发生

以上是关于如何从另一个文档调用函数/无法打开 Optional.none的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个文件调用函数?

如何从另一个类中的一个类调用 setter 函数?

如何从另一个表单调用表单?

从另一个视图调用拆分视图

如何从另一个成员函数调用成员函数指针?

Vue.js 模态窗口在从另一个组件单击时未打开