当我将非空位置添加到 User
的 locations
属性时,该属性仍然为零。
public struct User: Printable {
var name: String
var locations: [LocationData] = []
public var description: String {
return "User: \(name), locations: \(locations)"
}
}
public struct LocationData: Printable {
var unixtime: NSTimeInterval
var latitude: CLLocationDegrees
var longitude: CLLocationDegrees
var date: NSDate{
return NSDate(timeIntervalSince1970: unixtime)
}
public var description: String {
return "LocationData: date: \(date), latitude: \(latitude), longitude: \(longitude)"
}
}
这是我向用户添加位置的方法:
for userText in usersArray{
let userFieldsArray = userText.componentsSeparatedByString(("|"))
let username = userFieldsArray[0]
var user = users.filter{$0.name == username}.first
if user == nil{
user = User(name: username, locations: [])
users.append(user!)
}
let unixtime = (userFieldsArray[1] as NSString).doubleValue
let latitude = (userFieldsArray[2] as NSString).doubleValue
let longitude = (userFieldsArray[3] as NSString).doubleValue
let location = LocationData(unixtime: unixtime, latitude: latitude, longitude: longitude)
user?.locations.append(location)
}
最佳答案
这是来自 Java 或 C++ 背景的关于值类型与引用类型的常见混淆。当您将用户的内容分配给本地变量 user
,然后在示例底部更改该变量时,您只是修改了本地副本。将 User 更改为类
,一切都会正常工作。
从风格上讲,如果您在代码的前面使用强制展开,则还应该在底部使用强制展开,因为您不希望它默默地失败。
或者,将其保留为结构体,但在完全变异之前不要将 user
放入 users
中。
关于ios - 无法将结构附加到数组属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31688002/