使用Swift中的NSMUTABLEARRY自定义初始化
我有一个自定义的scrollView初始化,如下所示使用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) {
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数组,您将无法观察到这一点