struct Bar
{
var one:[Int] = []
var two:[Int] = []
var tri:[Int] = []
}
class foo
{
var bar = Bar()
func setupBar()
{
bar.one = [1]
bar.two = [2,2]
bar.tri = [3,3,3]
}
//bars are updated here
func updateBars()
{
updateBar(bar.one, bar.two) //...here...
updateBar(bar.two, bar.tri) //...here...
//etc...
}
//Bar1 should be concatenated with Bar2, and thus Bar1 will be updated.
func updateBar(_bar1:[Int], _bar2:[Int]) //...here...
{
}
在上面的例子中,updateBar方法的参数在定义和调用中的正确语法是什么?
我尝试使用inout,但它也没有用。
答案 0 :(得分:1)
您正在使用inout
的正确轨道,只是不要忘记在呼叫时&
。
所以,声明这样的函数:
func updateBar(_ bar1: inout [Int], _ bar2:[Int])
并且这样打电话:
updateBar(&bar.one, bar.two)
我还提了一些代码:
struct Bar
{
var one:[Int] = []
var two:[Int] = []
var tri:[Int] = []
}
class foo
{
var bar = Bar()
func setupBar()
{
bar.one = [1]
bar.two = [2,2]
bar.tri = [3,3,3]
}
//bars are updated here
func updateBars()
{
updateBar(&bar.one, bar.two) //...here...
updateBar(&bar.two, bar.tri) //...here...
}
//Bar1 should be concatenated with Bar2, and thus Bar1 will be updated.
func updateBar(_ bar1: inout [Int], _ bar2:[Int]) //...here...
{
bar1.append(contentsOf: bar2)
}
}
let f = foo()
f.setupBar()
f.updateBars()
答案 1 :(得分:0)
函数参数具有参数标签和参数名称。如果您未指定参数标签,则调用函数必须使用参数名称来指定参数。所以,如果你定义
func updateBar(bar1:[Int], bar2:[Int]){}
你必须像这样调用你的函数:
updateBar(bar1: bar.one, bar2: bar.two)
# in your case you should have called updateBar(_bar1: bar.one, _bar2: bar.two)
如果要在调用函数中省略参数标签,则应使用_
将其明确标记为省略:
func updateBar(_ bar1: [Int], _ bar2: [Int]){} # note space between _ and bar1
现在你可以在没有参数标签的情况下调用你的函数:
updateBar(bar.one, bar.two)