首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS,Swift:如何保存包含自定义对象的数组,以便加载以供重用?

在iOS中,可以使用归档(Archiving)来保存包含自定义对象的数组,以便加载和重用。归档是一种将对象转换为二进制数据的过程,可以将对象保存到文件中或者存储在内存中。

下面是一种保存包含自定义对象的数组的方法:

  1. 首先,确保自定义对象遵循NSCoding协议。NSCoding协议定义了两个方法:encode(with:)init(coder:),用于将对象编码为二进制数据和从二进制数据解码为对象。
代码语言:swift
复制
class CustomObject: NSObject, NSCoding {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func encode(with coder: NSCoder) {
        coder.encode(name, forKey: "name")
    }
    
    required init?(coder: NSCoder) {
        name = coder.decodeObject(forKey: "name") as? String ?? ""
    }
}
  1. 创建一个包含自定义对象的数组。
代码语言:swift
复制
let object1 = CustomObject(name: "Object 1")
let object2 = CustomObject(name: "Object 2")
let object3 = CustomObject(name: "Object 3")

let array = [object1, object2, object3]
  1. 使用NSKeyedArchiver将数组归档为二进制数据,并将其保存到文件中。
代码语言:swift
复制
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("data.archive")

do {
    let data = try NSKeyedArchiver.archivedData(withRootObject: array, requiringSecureCoding: false)
    try data.write(to: fileURL)
} catch {
    print("Failed to save data: \(error)")
}
  1. 加载保存的数据并解档为数组。
代码语言:swift
复制
var loadedArray: [CustomObject] = []

do {
    let loadedData = try Data(contentsOf: fileURL)
    if let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(loadedData) as? [CustomObject] {
        loadedArray = array
    }
} catch {
    print("Failed to load data: \(error)")
}

现在,你可以使用loadedArray数组中的对象进行重用。

这里推荐使用腾讯云的对象存储服务 COS(Cloud Object Storage),它提供了高可靠性、低成本的对象存储解决方案,适用于存储和管理任意类型的文件和媒体数据。你可以将归档的数据上传到COS中进行长期保存和备份。

腾讯云COS产品介绍链接地址:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何结合 Core Data 和 SwiftUI

设置核心数据需要两个步骤:创建所谓的持久性容器(从容器存储中加载并保存实际数据),然后将其注入 SwiftUI 环境中,以便我们所有的视图都可以访问它。 Xcode 模板已经为我们完成了这两个步骤。...这将告诉 Core Data 创建学生并保存他们所需的一切,因此请回到 ContentView.swift,以便我们编写一些代码。...从那里开始,我们可以像常规的 Swift 数组一样开始使用学生,但是您会发现有一个陷阱。...这些对象之所以称为托管对象,是因为 Core Data 会照料它们:它从持久性容器中加载它们并将它们的更改也写回。...现在,您可能认为这需要大量的学习,但并不会带来很多结果,但是您现在知道什么是实体和属性,知道什么是托管对象和请求,并且已经了解了如何保存更改。

11.8K30

Swift 周报 第三十三期

使用 Swift Package 插件将自定义字体加载到您的应用程序中[9] 摘要: 本文介绍了如何使用 Swift Package 插件将自定义字体加载到应用程序中。...通过创建一个 Swift Package 来包含共享的字体文件和字体加载代码,可以加快新应用的发布速度,减少代码重复,并提供一个统一更新字体文件的地方。...结合 Swift Package 的可重用性和 Swift Package 插件的强大功能,甚至可以在构建时从字体文件自动生成所有必要的代码。本文使用 SwiftGen 来演示如何实现这一点。...通过示例,展示了如何创建短数字格式样式和粗体数字格式样式,并说明了如何在自定义类型中重用这些格式样式。最后,作者还提供了一种封装格式化逻辑的方法。.../66115 [8] 轻量化的 iOS 动画框架实现: https://juejin.cn/post/7252586606091419708/ [9] 使用 Swift Package 插件将自定义字体加载到您的应用程序中

34220
  • iOS 9 Storyboard 教程(一下)

    这个table view应该会显示一列玩家名单,所以现在你需要为这个app创建一个数据模型—一个包含Player对象的数组.使用Swift File模板在iOS/Source里为这个工程添加一个新文件....接下来,你需要把一个Player对象数组赋值给PlayersViewController.使用Swift File模板为开始,创建一个新文件,命名为SampleData.把它添加到SampleData.swift...,并且分配了一个硬编码的Player对象数组给它....现在你有一个包含很多Player对象的数组.你可以继续在PlayersViewController里链接数据源.用下面的方法替换table view的数据源: override func numberOfSectionsInTableView...: 1.dequeueReusableCellWithIdentifier将会使用重用标识符PlayerCell,重用已经存在的cell如果不存在就创建一个新的. 2.你查找每一行对应的Player对象

    3.1K20

    应用程序内购买教程:入门

    如果这些是不熟悉的主题,那么 在开始之前查看我们的Swift教程范围。您还需要一个付费开发者帐户,可以访问iOS开发人员中心 和App Store Connect。...主视图控制器位于MasterViewController.swift中。此类显示表视图,其中包含可用IAP列表。购买存储为SKProduct对象数组。...start() } 此代码保存用户的完成处理程序以供将来执行。然后,它通过SKProductsRequest对象创建并向Apple发起请求。...它接收一个SKProduct对象数组并将它们传递给先前保存的完成处理程序。处理程序使用新数据重新加载表。如果出现问题,request(_:didFailWithError:)则调用。...如果交易已完成或已恢复,则会将其添加到购买集并将标识符保存在其中UserDefaults。它还会在该事务中发布通知,以便应用程序中的任何感兴趣的对象都可以监听它以执行更新用户界面等操作。

    5.5K20

    架构之路 (五) —— VIPER架构模式(一)

    开始 首先看下主要内容: 在本教程中,您将了解如何在SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行的iOS应用程序,来自翻译。...在Data Sources组中,有用于保存或加载数据的辅助函数。 如果您喜欢在WaypointModule组中查看前面的内容。它有一个Waypoint编辑屏幕的VIPER实现。...它将重用TripDetailInteractor,因为它共享相同的数据模型,并且是只读read-only视图。 创建一个名为TripMapViewPresenter.swift的新Swift文件。...在init(interactor:)中,您将waypoints从interactor映射到MKPointAnnotation对象,以便它们可以作为地图上的大头针显示。...构建并运行,您现在可以自定义一次旅行!确保保存任何更改。

    17.6K10

    用这些 iOS 技巧让你的 APP 性能更佳

    不要包含徽标或其他品牌元素,除非它们是应用程序第一个页面的静态部分。」 使用启动页进行加载或品牌化可能会减慢首次使用的时间,并使用户感觉应用程序运行缓慢。...如果你尝试使用任何其他自定义子类(例如 UserViewController),Xcode 将提示你禁止使用自定义类名。 ? 启动页 storyboard不能包含非 UIKit 标准类。...这两种方法让我们指定需要保存或加载的数据以及如何对它们进行编码或解码。...这样可确保父类有机会保存和恢复状态。 一旦指定保存的对象解码完成,applicationFinishedRestoringState() 将被调用以告诉视图控制器状态已被恢复。...我建议观看 Apple 的 WWDC 2012 视频上的 UI 并发,以便更好地了解如何构建响应式应用。 01 后记 性能优化需要你在应用程序的功能之上编写更多的代码或配置其他设置。

    3.2K30

    窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用

    协议与委托代理回调在之前的博客中也是经常提到和用到的在《Objective-C中的委托(代理)模式》和《iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流...说到协议,在Objective-C中也是有协议的,并且Swift中的协议和Objc中的协议使用起来也是大同小异的,在Java等现代面向对象编程语言中有接口(Interface)的概念,其实和Swift中或者...本篇先给出CocoaTouch中常用控件UITableView的常用回调,并以此来认识一下回调的使用方式。紧接着会给出如何去实现自己的Delegate回调,即在自定义控件中去实现委托代理回调。...通过Cell的重用标示符来创建Cell的实例对象,并对Cell上的一些属性赋值,并返回当前是Cell实例对象,代码如下所示。...上面的场景在iOS开发中极为常见,使用场景也是比较广泛的。所以协议无论在Swift还是在iOS开发中都是极为重要的概念之一。

    3.6K80

    唐巧的iOS技术博客选摘

    使用crashlytics来保存应用崩溃信息:http://blog.devtang.com/blog/2013/07/24/use-crashlytics/ 3. iOS开发工具篇,AppStore...JokeClient-Swift:JokeClient-Swift是@YANGReal用swift写了一个开源的糗事百科的客户端,主要涉及网络请求,图片加载、缓存、自定义UITableViewCell、...《如何用Swift做一个不错的按钮变换动画》:文章介绍了如何用Swift语言,采用Core Graphics来完成两个按钮之间的切换动画效果(效果图如下所示)。...《iOS 图片加载速度极限优化—FastImageCache 解析》:FastImageCache 是 Path 团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动起来更顺畅,本文分析了它的实现方式...包含了 iOS、Mac 和 Apple Watch 版本,并且为这个 demo 分别用 Objective-C 和 Swift 实现了一遍,最后还包括了 30 页的文档。

    3.3K60

    ARKit

    世界跟踪还提供使AR体验更具沉浸感的功能,例如识别用户环境中的对象和图像以及响应真实世界的光照条件。 注意 您可以在用户的​​真实环境中显示3D对象,而无需构建自定义AR体验。...主题 第一步 验证设备支持和用户权限 确保您的应用可以使用ARKit并尊重用户隐私。 class ARSession 一个共享对象,用于管理增强现实体验所需的设备摄像头和运动处理。...快速拍摄:为增强现实创造游戏 了解Apple如何为WWDC18构建精选演示,并获得使用ARKit,SceneKit和Swift制作自己的多人游戏的技巧。...创建持久的AR体验 保存并加载ARKit世界地图数据,以允许用户在相同的真实环境中返回之前的AR体验。 class ARWorldMap 来自世界跟踪AR会话的空间映射状态和锚点集。...class ARObjectScanningConfiguration 一种配置,使用后置摄像头收集高保真空间数据,用于扫描3D对象以便以后检测。

    2.2K20

    春招路上孤独的iOSer的心路历程(面经)

    一定是线程不安全的么 swift 数组切片是什么 swift extension的理解 翻转链表 讲讲对这个程序的测试用例 最近公共父节点 提问 2019年 12-20 hr面 围绕简历上的获奖 还有奖学金成绩方面问了些问题...2020年 1-20 1、2面 一面 1 tableview 重用机制 滑动性能调优方法 2圆角效率问题 离屏渲染 3calayer 与uiview 区别 为什么这么设计 4swift 消息机制 5 多线程如何保证线程安全...gcd与NSopraretion的优缺点 7.tableview的理解重用以及调优 8.异步加载图片原理 9.平常调试怎么做的 10.gpu与cpu 离屏渲染 11.网络请求库的封装 12.内存管理...6 一面 40分钟 自我介绍 算法题: 两个队列实现栈 分类extension 在oc与swift区别 在什么时机加载(没答上来) oc与swift语言区别 tableview做了哪些优化 如何实现多个图片下载后合成一张图片...除了gcd group之外 其他方法 信号量与锁的区别 mvc和mvvm的区别 为什么从swift开始学 如何学习iOS的 有什么要问的?

    2.5K20

    iOS开发常用之网络、网页

    所有缓存的数据都可以自定义过期的时间,默认是1天.EGOCache支持多线程(线程安全),UITableView加载多张照片导致内存上涨的问题。...苹果提供过一个可达性类,用于检测网络状态但是该类由于年代久远,并不支持ARC该项目旨在提供一个苹果的可达性类的替代品,支持ARC和块的使用方式的iOS网络监测如何区分2,3,4G Reachability.swift...RealReachability - iOS下的实际网络连接状态检测,解决“如何判断设备是否真正连上互联网?而不是只有网络连接”的问题。...SwiftValidator - 基于规则的输入验证类库。项目良好的面向对象设计思想,使规则的扩展及自定义非常方便。...Proposer - Proposer用单个API处理iOS上的权限请求,以便使用前确认可访问“相册”,“相机”,“麦克风”,“通讯录”或“用户位置”。

    5.4K10

    深度学习图像识别项目(下):如何将训练好的Kreas模型布置到手机中

    AiTechYun 编辑:yxy 在上篇的博文中,你学到了如何用Keras训练卷积神经网络 今天,我们将这种经过训练的Keras模型部署到iPhone手机或者说iOS的APP中,在这里我们使用CoreML...如果你没有 LabelBinarizer对象,则需要修改代码以硬编码 class_labels集合 。 加载类标签和我们的Keras模型: ?...在 第17-19行,我们加载我们的类标签pickle文件,并将class_labels 作为列表存储 。 接下来,我们将训练好的Keras模型加载到一行(第23行)。...AVFoundation框架是iOS上的影声媒介,我们用它从相机中捕捉。 我们使用 Vision框架为我们自定义的CoreML模型分类,但这个框架容许的远不止这些。...这个交给Swift和iOS专家吧! 兼容性说明: 此应用程序已在iPhone 6s,iPhone 7和iPhone X上用iOS 11.3进行了测试。我使用xCode 9.3构建应用程序。

    5.4K40

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架的视频流App的构建

    首先,导航到 VideoFeedView.swift 并在 SwiftUI 导入的正下方添加以下导入: import AVKit 看看下面这个,你会看到你已经有了一个列表和一个视频数组。...这就是应用程序如何用数据填充现有列表的方式。 视频本身来自嵌入在应用程序包中的 JSON 文件。 如果您好奇,您可以查看 Video.swift 以了解它们是如何获取的。...2) 在这里,您获取 url 并创建一个 AVPlayer 对象。 AVPlayer 是在 iOS 上播放视频的核心。 播放器对象可以启动和停止您的视频,更改其播放速率,甚至可以调高和调低音量。...资产对象包含持续时间和创建日期等信息。 3) AVPlayerItem:AVAsset 的动态对应物。此对象表示可播放视频的当前状态。这是您需要提供给 AVPlayer才能使事情顺利进行的内容。...当您返回到feed时,预览会从停止的地方恢复。 6. Trying Not to Steal the Show 如果您打算制作一个包含视频的应用,那么考虑您的应用将如何影响您的用户非常重要。

    7K10

    老司机 iOS 周报 #77 | 2019-07-29

    新手推荐 Flutter-Notebook @CrazyCoderShi:Flutter-Notebook 由 OpenFlutter 小组产出,包含了很多常规移动端开发的组件/效果实现, 在目录的最后还附上了一本...自定义单词嵌入,用于自定义单词标记模型,控制推荐算法。 文本目录,用于将同类型词汇按组标记,建立简单的单词标记模型。...在这篇文章里,作者通过几个关键因素来帮助我们最大程度地重用代码,同时又能够避免让代码过于复杂或难以理解,从而取得良好的平衡。...在瀑布流这种滚动展示图片列表中,可以使用计时器统计活动中的图片,为活动中的图片加载剩余的部分。...Formatter - NSHisper @四娘:将数据转化为人类可读的文本格式是一个重要且复杂的任务,需要根据用户的国家,语言,时区和货币等因素进行格式化,仅仅使用对象的 description 是远远不够的

    96130

    干货 | 深入浅出Apple响应式框架Combine

    Combine 作用是将异步事件通过组合事件处理操作符进行自定义处理。关注如何处理变化的值,正是响应式编程的核心。 Combine可以概述为一种声明式的函数响应式编程,简洁用下图表示: ?...然后通过sink产生订阅者连接,sink方法返回的是Anycancellabel对象,它表示一个发布者和订阅者的链接可取消,通过store方法将其保存在外部变量setList数组中,这样能保证订阅者不会被释放...三、实战 3.1 自定义Publishers和Subscribers iOS13系统内置了诸如KVO,Notification,URLSession,Timer的Publisher,所以大部分场景开发者不需要自定义的...UIKit本身自带了很多UI控件的事件,但iOS系统本身确没有给出内置的publisher,为此我们需要自定义UIControl的Publisher。...+NotificationCenter.swift进一步了解Publisher和Subscriber是如何协同工作的原理。

    4.2K31

    Photos存储、获取、更改照片详解

    ALAssetsLibrary 在iOS9.0之后就被标记为过时方法,苹果建议使用Photos框架代替 问:UIImageWriteToSavedPhotosAlbum()保存图片很简单,但为什么还要用...框架功能十分强大,不止保存功能 下面详解Photos这个iOS8.0才出现的新框架: 对 PhotoKit 基本构成的介绍:(本文采取最新的swift版本,OC得慢慢过渡到swift了) PHAsset...,也可以是相册的集合,从PHCollection 的类方法中获得 PHImageManager:用于处理资源的加载,加载图片的过程带有缓存处理,可以通过传入一个 PHImageRequestOptions...您可以使用此对象对照片库中的对象集执行更改,例如,编辑资源元数据或内容,插入新资源或重新排列集合的成员,您还可以使用照片库对象来注册照片在内容或资源元数据和集合发生变化时发送的消息,并验证用户是否已授权您的应用访问照片内容...,并获取每一个相册中的PHAsset对象 func fetchAllUserCreatedAlbum() { //获取自定义的相册 let topLevelUserCollections

    2.1K90

    干货 | 携程酒店iOS动态View的探索

    中UIView比较常用的,如同在iOS中UILabel是继承自UIView一样,我们继续创建一个JavaScript的Label对象,并继承自刚才在上面创建的View对象。...有了这些基础的JavaScript组件,接下去就可以如同在iOS中布局一样,开始用这些组件进行布局,如下代码片段示例了如何对一张图片进行布局。...0,0,180,180); demoView.addSubView(container) return demoView;} 如果在浏览器或者JavaScript环境中运行上述代码,会得到一个自定义的递归对象...,根对象会包含一个Subview数组,数组中的每个元素都有可能是另外一组UI对象,当然实际操作中并不建议层次太多,一般1-2层。...所以,与其说本文是在探索iOS中动态View的解决方案,也不妨说成是对JSContex和JSValue如何运用的一些探讨,从实际的摸索中来看,灵活运用好JavaScriptCore,可以有无限多的可能。

    77620
    领券