2017-03-27 80 views
0
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方法的參數的正確語法是什麼?在Swift中選擇性地將類的屬性傳遞給類方法

我試過使用inout,但它也沒有工作。

回答

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() 
+0

如果你把一個解釋你在答案中做了什麼,你會得到我的贊同。 – JeremyP

+0

@JeremyP,你是對的。有一個解釋是不錯的,而不僅僅是簡單的代碼。 :) –

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) 
相關問題