与NSMutableArray的自定义初始化斯威夫特
问题描述:
我在斯威夫特与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 init
“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方法,我不能明白为什么加入对象init
方法体现在“unitCreation
”的方法
谢谢
答
这是因为NSMutableArray是Swift的一个类,因此通过引用传递。对init
函数的任何修改都会修改原始数组。如果你使用的Swift数组是按值传递的,那么你不会观察到这个。