如何从另一个文档调用函数/无法打开 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的主要内容,如果未能解决你的问题,请参考以下文章