2016-04-23 184 views
0

我试图在函数如下面的代码完成返回一个简单的元组结束通话“额外的参数在召唤”:在斯威夫特

func meditatorForId(id:Int, completion:((Meditator, Int)? -> Void)){ 
    var counter:Int=0 
    for meditator in SanghaModelProvider.sharedProvider().meditatorsArray{ 
     if meditator.id == id{ 
      completion(meditator, counter) 
      return 
     } 
     counter+=1 
    } 
    completion(nil) 
} 

但我得到“额外的参数在召唤”在完成呼叫线路上没有得到更多的解释。可能是什么问题呢?

回答

1

您正在尝试呼叫完成有两个参数,但它应该是与元组一个参数:

completion((meditator, counter)) 

即:

let tuple = (meditator, counter) 
completion(tuple) 

如果您希望有两个称呼它参数然后改变你的功能:

func meditatorForId(id:Int, completion:((Meditator?, Int?) -> Void)) { 

然后这将工作:

completion(meditator, counter) 

,但你必须在第二个呼叫更改为:

completion(nil, nil) 
+0

所以ADDIO括号外的quotino标志变成了成元组,同时将其插入内保持作为参数。非常有趣,谢谢。 –

+0

是的,那是完全正确的。 – markwatsonatx