一、轻量级键值存储
1. HarmonyOS - Preferences
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 dataPreferences.getPreferences()获取 Preferences 实例(异步) let prefs = await dataPreferences.getPreferences(context, 'myPrefs');prefs.put()写入键值对(内存缓存,未持久化) await prefs.put('theme', 'dark');prefs.flush()手动触发内存数据持久化到磁盘 await prefs.flush();prefs.get()读取键值对(优先从内存读取) let theme = await prefs.get('theme', 'light');prefs.delete()删除指定键值 await prefs.delete('token'); -
使用场景:
// 示例:保存用户主题设置 async function saveTheme(theme: string) { let prefs = await dataPreferences.getPreferences(context, 'user_settings'); await prefs.put('theme', theme); await prefs.flush(); // 立即保存 }
2. iOS - UserDefaults
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 UserDefaults.standard获取 UserDefaults 单例 let defaults = UserDefaults.standarddefaults.set(_:forKey:)写入键值对(自动延迟持久化) defaults.set("dark", forKey: "theme")defaults.synchronize()已废弃(iOS 12+ 自动同步,无需调用) defaults.synchronize()defaults.object(forKey:)读取任意类型数据 let theme = defaults.object(forKey: "theme") as? String ?? "light"defaults.removeObject(forKey:)删除指定键值 defaults.removeObject(forKey: "token") -
使用场景:
// 示例:保存用户主题设置 func saveTheme(theme: String) { UserDefaults.standard.set(theme, forKey: "theme") // iOS 12+ 无需调用 synchronize() }
二、文件存储
1. HarmonyOS - File API
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 fs.open()打开文件(指定路径和模式,如读写/创建) `let file = await fs.open(path, fs.OpenMode.READ_WRITE fs.OpenMode.CREATE);` fs.write()写入数据到文件描述符 await fs.write(file.fd, "Hello".buffer);fs.read()从文件描述符读取数据 let buffer = new ArrayBuffer(1024); await fs.read(file.fd, buffer);fs.close()关闭文件描述符 fs.close(file.fd);fs.access()检查文件是否存在 let exists = await fs.access(path); -
场景示例:
// 保存用户日志到沙箱文件 async function saveLog(log: string) { let dir = globalThis.context.filesDir; let path = `${dir}/app.log`; let file = await fs.open(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); await fs.write(file.fd, log.buffer); fs.close(file.fd); }
2. iOS - FileManager
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 FileManager.default.urls(for:in:)获取沙箱目录路径(如 Documents、Caches) let url = FileManager.default.urls(for: .documentDirectory, .userDomainMask).first!url.appendingPathComponent()拼接文件路径 let fileURL = url.appendingPathComponent("data.txt")data.write(to:options:)写入数据到文件(原子性写入可选) try data.write(to: fileURL, options: .atomic)FileManager.default.contents(atPath:)读取文件数据 let data = FileManager.default.contents(atPath: fileURL.path)FileManager.default.removeItem(at:)删除文件 try FileManager.default.removeItem(at: fileURL) -
场景示例:
// 保存文本到 Documents 目录 func saveText(text: String) { let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let fileURL = dir.appendingPathComponent("note.txt") try? text.data(using: .utf8)?.write(to: fileURL, options: .atomic) }
三、关系型数据库
1. HarmonyOS - RDB
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 dataRDB.getRdbStore()创建或打开数据库 let rdbStore = await dataRDB.getRdbStore(context, config, version);rdbStore.executeSql()执行 SQL 语句(如建表、插入) await rdbStore.executeSql("CREATE TABLE IF NOT EXISTS user (id INT)");rdbStore.insert()插入数据到指定表 await rdbStore.insert("user", { id: 1, name: "Alice" });RdbPredicates构建查询条件(链式调用) let predicates = new RdbPredicates("user").equalTo("name", "Alice");rdbStore.query()执行查询并返回结果集 let resultSet = await rdbStore.query(predicates, ["id", "name"]); -
场景示例:
// 查询用户列表 async function queryUsers() { let predicates = new dataRDB.RdbPredicates('user'); predicates.greaterThan("age", 18); let resultSet = await rdbStore.query(predicates, ['id', 'name']); while (resultSet.goToNextRow()) { let id = resultSet.getLong(resultSet.getColumnIndex('id')); let name = resultSet.getString(resultSet.getColumnIndex('name')); } }
2. iOS - Core Data
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 NSPersistentContainer初始化 Core Data 容器(管理上下文和存储) let container = NSPersistentContainer(name: "UserModel")NSManagedObjectContext获取上下文(执行增删改查) let context = container.viewContextNSFetchRequest创建查询请求 let request: NSFetchRequest<User> = User.fetchRequest()NSPredicate构建查询条件 request.predicate = NSPredicate(format: "age > %d", 18)context.save()保存上下文变更到数据库 try context.save() -
场景示例:
// 查询年龄大于 18 的用户 func fetchAdultUsers() { let request: NSFetchRequest<User> = User.fetchRequest() request.predicate = NSPredicate(format: "age > %d", 18) let users = try? context.fetch(request) }
四、敏感数据加密存储
1. HarmonyOS - 安全存储
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 cryptoFramework.createCipher()创建加密算法实例(如 AES-GCM) `let cipher = cryptoFramework.createCipher('AES256 GCM PKCS7');` cipher.init()初始化加密模式(需传入密钥) await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key);cipher.doFinal()执行加密/解密操作 let encrypted = await cipher.doFinal(data.buffer);cryptoFramework.createSymKeyGenerator()生成对称密钥 let generator = cryptoFramework.createSymKeyGenerator('AES256'); -
场景示例:
// 加密用户密码 async function encryptPassword(password: string) { let generator = cryptoFramework.createSymKeyGenerator('AES256'); let key = await generator.generateSymKey(); let cipher = cryptoFramework.createCipher('AES256|GCM|PKCS7'); await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key); let encrypted = await cipher.doFinal(new Uint8Array(password.buffer)); return encrypted; }
2. iOS - Keychain Services
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 SecItemAdd(_:_:)添加条目到 Keychain SecItemAdd(query as CFDictionary, nil)SecItemCopyMatching(_:_:)查询 Keychain 条目 SecItemCopyMatching(query as CFDictionary, &result)SecItemUpdate(_:_:)更新 Keychain 条目 SecItemUpdate(query as CFDictionary, attributesToUpdate as CFDictionary)SecItemDelete(_:)删除 Keychain 条目 SecItemDelete(query as CFDictionary) -
场景示例:
// 保存密码到 Keychain func savePassword(password: String, for user: String) { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: user, kSecValueData as String: password.data(using: .utf8)! ] SecItemAdd(query as CFDictionary, nil) }
五、分布式数据同步
1. HarmonyOS - 分布式数据服务(DDS)
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 data.createKVManager()创建分布式数据管理器 let kvManager = data.createKVManager({ bundleName: 'com.example' });kvManager.getKVStore()获取分布式数据库实例 let kvStore = await kvManager.getKVStore('store1', { autoSync: true });kvStore.put()写入数据(自动同步到其他设备) await kvStore.put('key', 'value');kvStore.on('dataChange')监听数据变更事件 kvStore.on('dataChange', (data) => { ... });kvStore.get()读取本地数据(可能未同步最新值) let value = await kvStore.get('key'); -
场景示例:
// 跨设备同步用户设置 async function syncSettings() { let kvManager = data.createKVManager({ bundleName: 'com.example.app' }); let kvStore = await kvManager.getKVStore('settings', { autoSync: true }); await kvStore.put('theme', 'dark'); // 自动同步到其他设备 }
2. iOS - CloudKit
-
核心 API 及调用顺序:
API 方法 用途说明 代码示例 CKContainer.default()获取 CloudKit 容器 let container = CKContainer.default()container.privateCloudDatabase获取私有数据库(用户专属) let database = container.privateCloudDatabaseCKRecord(recordType:)创建记录对象 let record = CKRecord(recordType: "User")database.save(_:completionHandler:)保存记录到 CloudKit database.save(record) { (savedRecord, error) in ... }CKQuery构建查询条件 let query = CKQuery(recordType: "User", predicate: NSPredicate(value: true)) -
场景示例:
// 同步用户数据到 iCloud func syncUserToCloud(user: User) { let record = CKRecord(recordType: "User") record["name"] = user.name CKContainer.default().privateCloudDatabase.save(record) { _, error in if error == nil { print("同步成功") } } }
总结
通过对比 API 调用顺序和实际代码示例,可以清晰看到:
- HarmonyOS 更强调 异步操作(如
await)和 声明式 API(如RdbPredicates)。 - iOS 的 API 更依赖 闭包回调(如 CloudKit)和 链式语法(如 Core Data 的
NSFetchRequest)。 - 加密与同步:HarmonyOS 通过 TEE 和分布式软总线实现本地安全与跨设备同步,iOS 依赖 Secure Enclave 和 iCloud 云端服务。