2014-10-20 52 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数组是按值传递的,那么你不会观察到这个。