gpt4 book ai didi

ios - Swift - 加载外部数据的可变范围

转载 作者:行者123 更新时间:2023-11-28 14:57:24 25 4
gpt4 key购买 nike

我正在使用 Mapbox 框架。我使用他们的 Studio(网络应用程序)创建了一些 map 形状(多边形和坐标),我已将其下载为 GeoJSON 文件。此文件与我的 iOS 应用程序捆绑在一起。所有提供的示例都非常小且结构简单,就像在 viewDidLoad 中将所有剩余代码一样。

我正在尝试设计应用程序以便加载一次数据,然后可以访问此变量以便能够根据需要添加和/或删除其中一些映射项。

我应该使用全局变量吗?如果是这样,我应该在哪里声明 data 变量,以便可以在任何地方访问它?或者这是不好的做法,我应该在范围访问较少的地方加载一次 data 变量,并在适当的函数调用中传递对象本身?这不也让人迷惑吗?初始 data 加载 viewDidLoad() 的最佳位置在哪里?

do {
let url = URL(fileURLWithPath: Bundle.main.path(forResource: "features", ofType: "geojson")!)
let data = try Data(contentsOf: url)
} catch {
print(error)
}

然后我会有其他功能可以过滤这个数据集,并且只添加或删除特定的 map 对象。

func loadSomeData(forGroup name: String, withData data: Data) {
let shapeCollection = try MGLShape(data: data, encoding: String.Encoding.utf8.rawValue) as! MGLShapeCollectionFeature
for shape in shapeCollection.shapes {
if shape.attribute(forKey: "group") as! String == name {
if let point = shape as? MGLPointAnnotation {
// ADD ITEM TO MAP
} else if let polygon = shape as? MGLPolygon {
// ADD ITEM TO MAP
}
}
}
}

var group = "group1"
loadSomeData(forGroup: group)

因此,这将为具有“group1”属性的所有对象过滤相同的原始数据源,并仅加载这些对象(之前会删除现有对象,并且可能会做很多其他事情 - 我只需要掌握基础知识...)

最终,我更愿意解析 GeoJSON 数据文件,并为分组项目创建自定义对象。但是文件的结构是完全随机的,这意味着对象类的属性需要完全是可选的,但有些是延迟加载/计算的属性,从我的早期测试来看,它们不能很好地与可选的一起工作......

最佳答案

听起来你有几个问题:从你的包中加载数据,并使其全局可访问。

如果数据永远不会改变,那么只需从您的包中读取它就可以了。如果它可能在您的应用程序的生命周期中发生变化,您可能需要编写在启动时运行的代码,在启动时检查文档中的文件,如果找不到,则将其从包复制到文档目录,然后打开它来自文档。

然后您需要查询您的服务器以查看您的数据是否是最新的(使用版本号或更新时间戳)。如果它已更改,您将下载新数据,将更改保存到文档中,并更新版本/时间戳。

关于让您的数据在整个应用程序范围内可用,这可能是数据容器单例的一个很好的用例。单例将具有查询 map 数据的方法,并且它将负责我上面描述的加载/更新逻辑。

或者,您可能决定将数据很好地映射到 Core Data。

至于如何设计数据模型,那是一个单独的话题,您需要提供更多信息。

关于ios - Swift - 加载外部数据的可变范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49196977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com