Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift中的NSMUTABLEARRY自定义初始化_Swift_Initialization - Fatal编程技术网

使用Swift中的NSMUTABLEARRY自定义初始化

使用Swift中的NSMUTABLEARRY自定义初始化,swift,initialization,Swift,Initialization,我有一个自定义的scrollView初始化,如下所示 class CustomScrollView:UIScrollView,UIScrollViewDelegate { private let unitLabelWidth:CGFloat = kScreenWidth / 3 private let displayedUnits:NSMutableArray? init(frame: CGRect,unitData:NSMutableArray,scrollType:Int) {

我有一个自定义的scrollView初始化,如下所示

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以从UnitScroll创建对象时,传递的数据是[UNIT1,UNIT2]

现在我正在打印单位。这就是我看到奇怪结果的地方。我希望看到打印输出为[UNIT1,UNIT2],与原始作业一样,但我看到的是[UNIT1,UNIT2,,]

在自定义init方法中添加的对象反映在println语句中

我将单位作为参数传递给自定义init方法,但我无法理解为什么在unitCreation方法中会反映添加对象init方法


谢谢

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