我想知道是否有更好的方法来初始化大量相同类型的实例。这不是仅限于Swift的问题,但在这种情况下我使用的是Swift。
例如,有一大堆 API端点。假设我在这个API中有100个端点,并且每个端点都有一些共同的功能,例如标题,参数列表,解析格式等等......尽管每个端点都有不同的值"选项"。
我可以想出几种表达100个端点的方法:
创建包含所有值的资源文件,并从应用启动时的文件中读取它们。这个问题是它变成了字符串类型,并且可能存在拼写错误和/或大量复制/粘贴键值。这将包括 plist文件,json文件,sqlite表,csv文件等。它集中并压缩数据,但它看起来并不像维护友好或快速。此外,如果细节有点私密,资源文件似乎更难混淆。
创建一个巨大的enum-ish函数,其中所有API端点实例初始化代码都在同一区域/函数/文件中blobbed 。这相当于做一个巨大的switch语句或者在一个地点发生所有实例化的集合文字。这里的优点是它可以是强类型的,并且它也包含在一个区域中,类似于资源文件的作用。但是,它将是一个有大量滚动的大文件。也许太大了?
为每个端点创建单独的文件/模块/实例/子类型,或者或多或少地为实例内部的硬编码计算属性创建。这可能是为每个端点创建一个扩展和/或子类,并将它们放在一个单独的swift文件中。这限制了每个端点的可视范围,但它也只是将项目文件转换为数据块。
我想知道这些选项中是否存在哲学论据。或者,还有其他我没有想过的选择。是偏好吗?在初始化大量似乎是一堆复杂文字的大量文章时是否有最佳做法?
答案 0 :(得分:1)
如果你有很多这样的静态数据或机器生成的类,请考虑WWDC 2016's Optimizing App Startup Time中的建议。这是一个很棒的话题。加载器必须初始化并修复所有静态对象实例和类;如果你有很多,你的应用程序加载时间将受到不利影响。
对于静态数据,一条建议就是使用你已经完成的Swift,因为Swift知道将实例化推迟到运行时间。
斯威夫特对大规模生产的课程没有帮助;虽然你可以改用结构。即使忽略了启动时间问题,我也会因为数据驱动而犯错误。选项1.维护较少的代码。恕我直言这里有字符串输入没有错,这段代码不太可能改变太多;添加端点将是微不足道的。当你甚至没有编写新代码时,看到新功能很酷!