我創建了一個城市類,它由幾個City對象組成,每個City對象都有特定的數據。由於數據是固定的,我想將它分配給Cities對象的init()函數。用對象填充數組
// CASE 1 - ERROR
class Cities : NSObject {
var cityList:[City]
override init() {
cityList = []
let city = City()
city.fill("LA" , "USA")
self.cityList.append(city)
city.fill("Amsterdam" ,"Netherlands")
self.cityList.append(city)
city.fill("Beijing" , "China")
self.cityList.append(city)
結果:北京北京
// CASE 2 - CORRECT
class Cities : NSObject {
var cityList:[City]
override init() {
cityList = []
var city:City
city = City(name: "LA" ,country: "USA")
self.cityList.append(city)
city = City(name: "Amsterdam", country: "Netherlands")
self.cityList.append(city)
city = City(name: "Beijing" , country: "China")
self.cityList.append(city)
結果:LA,阿姆斯特丹,北京
當我運行這個第一個腳本,我得到一個很好的城市對象陣列中有3個城市,都是北京。
在正確的情況下,數據由對象City的init函數分配。現在一切都按預期工作。
在這兩種情況下,我只創建了一個城市對象:城市。爲什麼這種Swift行爲有所不同? 使用Apple Swift 2.1版
考慮如果你可以使用一個結構來代替這個類,你可以使用值語義而不是引用嗎? – Wain