Я создал класс городов, который состоит из нескольких объектов города, каждый из которых имеет конкретные данные. Поскольку данные фиксированы, я хочу назначить его в функции init() объекта Cities.Заполнить массив объектами
// 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 города в нем, весь Пекин.
В правильном случае данные назначаются функцией init объекта City. Теперь все работает так, как ожидалось.
В обоих случаях я создал только один объект Город: город. Почему это различие в поведении Свифт? Использование Apple Swift version 2.1
Рассмотрите, можете ли вы использовать структуру для этого вместо класса, можете ли вы использовать семантику значения вместо ссылки? – Wain