如何将多个返回值设置为隐式展开的变量?

时间:2016-01-29 04:11:26

标签: swift

我有一个以这种方式返回多个值的函数:

func foo() -> (Int, Int) {
     // some code
     return (x, y)
}

现在在调用此函数的类中:

class myClass {
    private var myX : Int!
    private var myY : Int!

    func myFunc() {
        let ret = foo()
        myX = ret.0
        myY = ret.1
    }
}

如果我这样设置它们

(myX, myY) = foo()

编译器显示错误

Cannot express tuple conversion '(Int, Int)' to '(Int?, Int?) ...

有没有办法设置myX& myY直接在这种情况下?

2 个答案:

答案 0 :(得分:0)

您可以在变量y上使用didSet。这假设您希望y始终等于x。

class myClass {
    private var myX : Int!
    private var myY : Int! {
                 didSet{
                     if myY != myX {
                         myX = myY
                     }
                 }
    }


    func myFunc() {
        let ret = foo()
        myY = ret.0
       //After you assign myY didSet is called and myX is will be set to the same.
    }
}

答案 1 :(得分:0)

你确定这条消息是什么吗?当我尝试你的代码时,我得到了

Cannot express tuple conversion '(Int, Int)' to '(Int!, Int!)'

这是有道理的,因为myX和myY是隐式解包的选项。将foo更改为以下内容然后工作正常:

func foo() -> (Int!, Int!) {
     let x = 1
     let y = 2
     return (x, y)
}