将新值附加到通用数组

时间:2014-08-21 03:22:35

标签: ios arrays generics swift

我正在尝试将新值附加到通用数组。问题是附加到数组的最后一个值显示为所有数组对象的内容。我想我正在做一个可怕的非受迫性错误......有人能说出来吗?

    // Playground - noun: a place where people can play


import Foundation
import CoreLocation

class UrgentCenterDetails{

    var latitude:CLLocationDegrees
    var longitude:CLLocationDegrees
    var title:String
    var subtitle:String
    var isiBeaconEnabled:Bool

    init(){
        title = "Default"
        subtitle = "Default entry"
        latitude = 0.0
        longitude = 0.0
        isiBeaconEnabled = false

    }

    func setCenterDetails(latitude:CLLocationDegrees, longitude:CLLocationDegrees, title:String, subtitle:String, isiBeaconEnabled: Bool){
        self.title = title
        self.subtitle = subtitle
        self.latitude = latitude
        self.longitude = longitude
        self.isiBeaconEnabled = isiBeaconEnabled
    }

}

var urgentCenters:Array<UrgentCenterDetails> = []

var center:UrgentCenterDetails = UrgentCenterDetails()
var title:String
var subtitle:String
var latitude:CLLocationDegrees
var longitude:CLLocationDegrees
var iBeacon:Bool

title = "Hospital of the University of Pennsylvania"
subtitle = "UrgentCare Center 1";
latitude =  39.9532293
longitude = -75.194119
iBeacon = false
center.setCenterDetails(latitude, longitude:longitude, title:title, subtitle:subtitle, isiBeaconEnabled: iBeacon)
urgentCenters.append(center)
println("\(urgentCenters[0].title)")

title = "Drexel Hospital"
subtitle = "UrgentCare Center 2"
latitude =  39.95661270
longitude =  -75.18994409
iBeacon = false
center.setCenterDetails(latitude, longitude:longitude, title:title, subtitle:subtitle, isiBeaconEnabled: iBeacon)
urgentCenters.append(center)
println("\(urgentCenters[0].title)")
println("\(urgentCenters[1].title)")

2 个答案:

答案 0 :(得分:0)

您没有创建center对象的第二个实例。相反,您将替换其属性(并更新其已存在于阵列中的第一个副本),然后再次添加它。

您需要添加类似

的内容
center = UrgentCenterDetails()

将一次添加到数组后

答案 1 :(得分:0)

您正在添加相同的对象。如果您以后更改其值,它仍然是同一个对象。为你的第二个案件制作一个新的center = UrgentCenterDetails()

有点像这样:你的朋友乔治想把他的房子交给最好的彩绘之家,并请你提出建议。你告诉他他的房子看起来很漂亮,所以他去画绿色,然后叫法官来看看。然后你改变主意,决定粉红色会更好,所以他重新粉刷他的房子并再次给评委打电话。法官,忙碌的人,不能马上来,所以他们明天来,但不要注意到同一个地址,来看看他的房子两次。不出所料,他们看到两个粉红色的房子,而不是绿色和粉红色的房子。如果您希望评委看到两个房子而不是两个房子,请向他们展示两个不同的房屋。

你的数组也是这样的:有两个对同一个对象的引用,当你来看看数组时最终会出现关于Drexel的内容。