6
我已经定义了一个协议与方法委托(可选类型没有解开的值)返回一个元组:返回元组从
protocol SMCalculatorDelegate {
func numbersToAdd() -> (Int, Int)
}
当我尝试在我的课像这样来调用这个对委托方法:
class SMCalculator: NSObject {
var delegate : SMCalculatorDelegate?
func add() {
let myTuple : (n1: Int, n2: Int) = delegate?.numbersToAdd()
}
}
我得到首发let myTuple...
行引用该行代码的.numbersToAdd()
部分下面的错误。
"Value of optional type '(Int, Int)?' not unwrapped; did you mean to use '!' or '?'?"
为什么不能这样工作时,我可以提取元组没有像这样的错误?
let tuple = delegate?.numbersToAdd()
println(tuple) //Prints (5,5)
你是正确的,这将删除生成错误,而逻辑是有道理的......但是,我仍然有麻烦访问元组的个人价值。如果我已经正确地阅读了文档,我*应该*然后能够去'println(myTuple.n1)',但是这会引发错误''(n1:Int,n2:Int)?'没有名为'n1''的成员 – Sammio2
我更新了我的解决方案以显示如何访问可选变量。因为他们可以零,你需要使用'!'运算符来解开它们,这告诉编译器,您确信在代码中此处的值永远不会为零,或者您使用if结构来捕获值为零的情况。 – Jann
哦,当然是!由于元组是可选的,因此元组内的值也是可选的。谢谢你的帮助!我的大脑在漫长的一周结束时被炸掉! – Sammio2