結(jié)論寫在最前面:
數(shù)組元素是struct時,復(fù)制數(shù)組后修改辕坝,以及修改指向數(shù)組元素的變量都不會影響到原來的數(shù)組;元素是class時則會荐健。
詳細(xì)的測試用例一圖清楚明了酱畅。
測試結(jié)果
測試代碼
class Person : CustomDebugStringConvertible {
var debugDescription: String {
return "debug:\(age)"
}
var age : Int = 0
init(age:Int){
self.age = age
}
}
func forClass() {
var perArr = [Person]()
perArr.append(Person(age:12))
perArr.append(Person(age:13))
perArr.append(Person(age:14))
print("A:perArr = \(perArr)")
//perArr = [debug:12, debug:13, debug:14]
var copyArr = perArr
print("A:copyArr = \(copyArr)")
//A:copyArr = [debug:12, debug:13, debug:14]
//==============[case 1]=======================
//操作:對數(shù)組復(fù)制后,修改復(fù)制得到的數(shù)組的元素江场,
copyArr[1].age = 100
print("B:copyArr = \(copyArr)")
//B:copyArr = [debug:12, debug:100, debug:14]
print("B:perArr = \(perArr)")
//B:perArr = [debug:12, debug:100, debug:14]
//結(jié)果:原來數(shù)組的元素也會發(fā)生改變纺酸,兩個輸出結(jié)果里都是'debug:100';所以數(shù)組元素依然是引用
//==============[case 2]=======================
//操作:新建一個元素,把元素添加到數(shù)組后再修改該元素
let testP = Person(age:999)
copyArr.append(testP)
print("C:copyArr = \(copyArr)")
//C:copyArr = [debug:12, debug:100, debug:14, debug:999]
print("A:testP = \(testP)")
//A:testP = 999
testP.age = 888
print("D:copyArr = \(copyArr)")
//D:copyArr = [debug:12, debug:100, debug:14, debug:888]
//結(jié)果:數(shù)組的元素也會發(fā)生改變址否,輸出結(jié)果里有'debug:888';所以數(shù)組元素依然是引用
}
struct User : CustomDebugStringConvertible {
var age : Int = 0
var debugDescription: String {
return "debug:\(age)"
}
}
func forStruct() {
var perArr = [User]()
perArr.append(User(age:12))
perArr.append(User(age:13))
perArr.append(User(age:14))
print("A:perArr = \(perArr)")
//perArr = [debug:12, debug:13, debug:14]
var copyArr = perArr
print("A:copyArr = \(copyArr)")
//A:copyArr = [debug:12, debug:13, debug:14]
//==============[case 1]=======================
//操作:對數(shù)組復(fù)制后餐蔬,修改復(fù)制得到的數(shù)組的元素,
copyArr[1].age = 100
print("B:copyArr = \(copyArr)")
//B:copyArr = [debug:12, debug:100, debug:14]
print("B:perArr = \(perArr)")
//B:perArr = [debug:12, debug:13, debug:14]
//結(jié)果:原來數(shù)組的元素不會發(fā)生改變佑附,兩個輸出結(jié)果里都是'debug:100'和‘debug:13’
//==============[case 2]=======================
//操作:新建一個元素樊诺,把元素添加到數(shù)組后再修改該元素
var testP = User(age:999)
copyArr.append(testP)
print("C:copyArr = \(copyArr)")
//C:copyArr = [debug:12, debug:100, debug:14, debug:999]
print("A:testP = \(testP)")
//A:testP = 999
testP.age = 888
print("D:copyArr = \(copyArr)")
//D:copyArr = [debug:12, debug:100, debug:14, debug:999]
//結(jié)果:數(shù)組的元素不會發(fā)生改變,輸出結(jié)果里還是'debug:999';
}