2014-10-20 80 views
0

我在斯威夫特與NSMutableArray的自定義初始化斯威夫特

class CustomScrollView:UIScrollView,UIScrollViewDelegate { 

private let unitLabelWidth:CGFloat = kScreenWidth/3 
private let displayedUnits:NSMutableArray? 

init(frame: CGRect,unitData:NSMutableArray,scrollType:Int) { 

    super.init(frame: frame) 

    unitData.addObject("") 
    unitData.addObject("") 

    self.pagingEnabled = false 
    self.delegate = self 
    self.scrollIdentifier = scrollType 
    self.displayedUnits = unitData 
} 

required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
    } 
} 

正如你可以看到如下的自定義scrollView initunitData」是NSMutableArray參數傳遞,我在我的自定義添加一些對象的數組init。這是一個非常簡單的。

現在當我創建這個scrollView類的對象時,我得到的輸出是我無法理解的。

看看下面的代碼

func unitCreation(){ 
    let units:NSMutableArray = NSMutableArray(objects:"Unit1","Unit2") 
    let unitLabelWidth = kScreenWidth/3 

    let fromUnitScroll = CustomScrollView(frame: CGRectMake(0, 0, kScreenWidth, ScrollHeight),unitData: units,scrollType:1) 
    mainView?.addSubview(fromUnitScroll) 


    println(units) 

    let toUnitScroll = CustomScrollView(frame: CGRectMake(0, fromUnitScroll.frame.origin.y + ScrollHeight * 3, kScreenWidth, ScrollHeight),unitData: units,scrollType:2) 
    mainView?.addSubview(toUnitScroll) 
} 

我有稱爲「units」與兩個對象「UNIT1」和「UNIT2」的陣列恆定。當我通過「units」創建對象「fromUnitScroll」時,通過的數據是["UNIT1","UNIT2"]

現在我正在打印「units」。這是我看到奇怪結果的地方。我期待看到打印輸出爲["UNIT1","UNIT2"],與原始作業一樣,但我看到的是["UNIT1","UNIT2","",""]

添加到自定義init方法中的對象反映在println語句中。

我傳遞「units」作爲參數傳遞給定製的init方法,我不能明白爲什麼加入對象init方法體現在「unitCreation」的方法

謝謝

回答

0

這是因爲NSMutableArray是Swift的一個類,因此通過引用傳遞。對init函數的任何修改都會修改原始數組。如果你使用的Swift數組是按值傳遞的,那麼你不會觀察到這個。