2017-07-21 122 views
2

我试图从我的第一个ViewController发送数据到我的第二个。在2个ViewControllers之间传递数据

它用一个简单的Int工作正常,但用这个Double它不起作用,我不明白为什么。所以如果你能解释它为什么不起作用,那很酷!

我的第一个视图控制器声明:

var time: Double? = 0.00 

然后我尝试把它发送到我的其他的ViewController:

let vc = segue.destination as! MySecondViewController 
    vc.rows = rows[pathForAVC] 
    vc.lap = lap[pathForAVC] 
    vc.indexPath = pathForAVC 
    vc.time = rows[pathForAVC]["Time"]! as! Double 

fatal error: unexpectedly found nil while unwrapping an Optional value

我的第二个视图控制器:

var time: Double? = 0.00 
topLabel.text = "\(time!)" 

注意:

行是Dictionnary:

var rows: [[String : AnyObject]] = [[:]] 

我真的不明白我的错......

+2

这与将值传递给我没有任何关系......它看起来像行[pathForAVC] [“Time”]'似乎没有包含一个值,并且您正在强制展开它。尝试安全地解开它使用'如果让unwrappedTime =行[pathForAVC] [“时间”]为? Double {}' –

+1

那里有太多的力量展开。你应该避免使用它。永远。 – Desdenova

+0

此外,如果您打算在字典中存储'Double's,那么它的类型应该是'[[String:Any]]'。 'Double'符合'Any'而不是'AnyObject'。 – Slayter

回答

3

的问题是,你是力量展开可能不存在的值:

vc.time = rows[pathForAVC]["Time"]! as! Double 

如果rows[pathForAVC]["Time"]!为零,您的应用程序将崩溃。您应该真的避免使用!,除非您的应用程序只需不能继续运行没有该值。那些情况应该是罕见

你应该使用if let声明这样的,而不是安全解开你的价值:

if let unwrappedTime = rows[pathForAVC]["Time"] as? Double { 
    print(unwrappedTime) 
} 

(我不是Xcode的附近,但现在上面的代码应尽量接近,以获得从编译有价值的提示) 。

让我知道你是否需要更多的解释。

+0

谢谢你们!现在我已经理解如何清晰地展开价值。它工作正常:) – pierreafranck

相关问题