使用Swift中的NSMutableArray进行自定义初始化

时间:2014-10-20 10:35:04

标签: swift initialization

我在Swift

中有一个自定义scrollView init
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")
    }
}

如您所见,“unitData”是传递的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方法会反映在“unitCreation”方法中

谢谢

1 个答案:

答案 0 :(得分:0)

这是因为NSMutableArray是Swift的类,因此通过引用传递。 init函数中的任何修改都将修改原始数组。如果您使用的是按值传递的Swift数组,您将不会观察到这一点。