ios - 无法将结构附加到数组属性

标签 ios swift struct

当我将非空位置添加到 Userlocations 属性时,该属性仍然为零。

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/

相关文章:

objective-c - Cocoa 中未调用我的委托(delegate)操作

ios - 为什么 SwiftUI 的 ForEach 循环范围没有更新?

c - 错误返回不兼容指针不兼容 C

ios - 如何在 Swift Struct 中存储多个回溯日期?

ios - 将 UIImage 调整为 100% 并裁剪

ios - 创建 Cocoa 文件

swift - 无法使用 'Self' 类型的索引为 'Int' 类型的值添加下标

c - fread_s 期间结构填充不正确

ios - 向导航栏添加文本和进度图标

ios - 在 Spritekit - Swift 3 中区分滑动和触摸