Swift 數組Array作爲函數參數時如何在函數內部改變其值?

在Objective-C中我們經常會將可變數組(NSMutableArray)作爲函數參數,然後在函數內部對其值進行更改:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *numbers = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
    [self doSomething:numbers];
    NSLog(@"%@",numbers);
}

- (void)doSomething:(NSMutableArray *)numArr{
    [numArr addObject:@"4"];
}

控制檯打印numbers,結果如下:


那麼同樣的需求在Swift中如何實現呢?

Swift中我們可以在參數類型的前面加上一個 inout 關鍵字,並在調用函數時在參數前加個取地址符 &,如下所示:

        func doSomething(numArr: inout [String]){
            numArr.append("4")
        }
        var numbers = ["1","2","3"]
        doSomething(numArr: &numbers)
        print(numbers)

控制檯打印結果爲:


注意,inout 修飾參數時採用的是拷入拷出模式,即在函數內部使用的是參數的copy,函數結束後,又對參數重新賦值。

由此,可以延伸一下,當一個類的屬性被設置了 willSet 和 didSet 觀察器時,如果該屬性被作爲函數參數,同時被 inout 修飾,那麼當調用此函數時,會觸發 willSet 和 didSet 觀察器。

發佈了70 篇原創文章 · 獲贊 45 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章