Ios 从委托返回元组(可选类型的值未展开)
我定义了一个协议,其中包含一个返回元组的方法:Ios 从委托返回元组(可选类型的值未展开),ios,tuples,swift,Ios,Tuples,Swift,我定义了一个协议,其中包含一个返回元组的方法: protocol SMCalculatorDelegate { func numbersToAdd() -> (Int, Int) } 当我尝试对类中的委托方法调用此函数时,如下所示: class SMCalculator: NSObject { var delegate : SMCalculatorDelegate? func add() { let myTuple : (n1: Int,
protocol SMCalculatorDelegate {
func numbersToAdd() -> (Int, Int)
}
当我尝试对类中的委托方法调用此函数时,如下所示:
class SMCalculator: NSObject {
var delegate : SMCalculatorDelegate?
func add() {
let myTuple : (n1: Int, n2: Int) = delegate?.numbersToAdd()
}
}
在引用该行代码的.numbersToAdd()
部分时,我在开始的let myTuple…
行中遇到以下错误
"Value of optional type '(Int, Int)?' not unwrapped; did you mean to use '!' or '?'?"
当我可以像这样毫无错误地提取元组时,为什么这不起作用
let tuple = delegate?.numbersToAdd()
println(tuple) //Prints (5,5)
我仍在努力掌握一切,但这似乎是正确的行为 如果
delegate
为nil,您将为myTuple分配nil,因此您还需要使myTuple成为可选的
class SMCalculator: NSObject {
var delegate : SMCalculatorDelegate?
func add() {
let myTuple : (n1: Int, n2: Int)? = delegate?.numbersToAdd()
// this works, because we're saying that myTuple definitely isn't nil
println(myTuple!.n1)
// this works because we check the optional value
if let n1 = myTuple?.n1 {
println(n1)
} else {
println("damn, it's nil!")
}
// doesn't work because you're trying to access the value of an optional structure
println(myTuple.n1)
}
}
适用于我您是正确的,这将删除构建错误,并且逻辑合理。。。然而,我仍然在访问元组的各个值时遇到困难。如果我正确地阅读了文档,那么我应该能够转到
println(myTuple.n1)
,但这会引发错误“(n1:Int,n2:Int)?”没有名为“n1”的成员。
我更新了解决方案,以显示如何访问可选变量。因为它们可以为零,所以你需要使用“!”运算符来展开它们,这会告诉编译器,在代码中的这一点上,您确定值永远不会为零,或者您使用if结构来捕捉值为零的情况。哦,是的,当然!!由于元组是可选的,因此元组中的值也是可选的。谢谢你的帮助!漫长的一周快结束了,我的脑子都快炸了!