我在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
”方法中
谢谢
答案 0 :(得分:0)
这是因为NSMutableArray是Swift的类,因此通过引用传递。 init
函数中的任何修改都将修改原始数组。如果您使用的是按值传递的Swift数组,您将不会观察到这一点。