我有一个以这种方式返回多个值的函数:
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
直接在这种情况下?
答案 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)
}