
Swift元编程终极指南使用Sourcery自动生成UserDefaults偏好设置代码【免费下载链接】SourceryMeta-programming for Swift, stop writing boilerplate code.项目地址: https://gitcode.com/gh_mirrors/so/Sourcery厌倦了编写重复的UserDefaults代码Sourcery是Swift元编程的终极工具它能自动生成样板代码让你告别手动编写UserDefaults偏好设置的繁琐工作。作为iOS和macOS开发中最强大的代码生成工具之一Sourcery已经被超过40,000个项目使用包括Airbnb、Bumble和New York Times等知名应用。为什么需要自动生成UserDefaults代码在Swift开发中UserDefaults是存储用户偏好设置和配置信息的标准方式。然而手动管理UserDefaults存在诸多痛点重复代码每个属性都需要getter、setter和key定义类型安全缺失字符串key容易拼写错误维护困难添加新属性时需要修改多个地方线程安全问题需要手动处理同步使用Sourcery你可以通过简单的模板定义自动生成类型安全、线程安全的UserDefaults包装器代码。这不仅节省时间还能减少错误。Sourcery守护模式实时代码生成体验Sourcery的守护模式daemon mode是其最强大的功能之一。当你修改模板或源代码时它会实时生成对应的代码让你立即看到效果。Sourcery守护模式实时生成UserDefaults包装器代码守护模式通过--watch参数启用它会监控你的源代码和模板文件的变化自动重新生成代码。这意味着你可以在编写UserDefaults包装器的同时立即看到生成的代码实现真正的所见即所得开发体验。如何为UserDefaults创建自定义模板1. 安装Sourcery首先你需要安装Sourcery。最简单的方式是通过Homebrewbrew install sourcery或者你也可以从GitHub仓库克隆并构建git clone https://gitcode.com/gh_mirrors/so/Sourcery cd Sourcery make install2. 创建UserDefaults模板在项目中创建一个新的模板文件例如UserDefaults.stencil。这个模板将定义如何为你的Swift类型生成UserDefaults包装器{% for type in types.all where type.annotations.userDefaults true %} // MARK: - {{ type.name }} UserDefaults Extension extension {{ type.name }} { {% for variable in type.storedVariables %} static var {{ variable.name }}: {{ variable.typeName }} { get { return UserDefaults.standard.value(forKey: {{ type.name }}.{{ variable.name }}) as? {{ variable.typeName }} ?? {{ variable.defaultValue }} } set { UserDefaults.standard.set(newValue, forKey: {{ type.name }}.{{ variable.name }}) } } {% endfor %} } {% endfor %}3. 在源代码中添加注解在你的Swift类型上添加Sourcery注解告诉它应该为哪些类型生成UserDefaults代码// sourcery: userDefaults true struct AppSettings { // sourcery: defaultValue false var isFirstLaunch: Bool // sourcery: defaultValue \en\ var language: String // sourcery: defaultValue 0 var launchCount: Int }4. 运行Sourcery生成代码使用命令行运行Sourcerysourcery --sources ./Sources --templates ./Templates/UserDefaults.stencil --output ./Generated或者创建配置文件.sourcery.ymlsources: - ./Sources templates: - ./Templates/UserDefaults.stencil output: ./Generated args: target: MyApp高级UserDefaults功能模板Sourcery的强大之处在于你可以创建复杂的模板来处理各种场景支持Codable对象的模板{% for type in types.all where type.annotations.userDefaultsCodable true %} // MARK: - {{ type.name }} Codable UserDefaults extension {{ type.name }} { {% for variable in type.storedVariables %} static var {{ variable.name }}: {{ variable.typeName }}? { get { guard let data UserDefaults.standard.data(forKey: {{ type.name }}.{{ variable.name }}) else { return nil } return try? JSONDecoder().decode({{ variable.typeName }}.self, from: data) } set { let data try? JSONEncoder().encode(newValue) UserDefaults.standard.set(data, forKey: {{ type.name }}.{{ variable.name }}) } } {% endfor %} } {% endfor %}支持同步到iCloud的模板{% for type in types.all where type.annotations.userDefaultsSync true %} // MARK: - {{ type.name }} iCloud Sync extension {{ type.name }} { {% for variable in type.storedVariables %} static var {{ variable.name }}: {{ variable.typeName }} { get { return NSUbiquitousKeyValueStore.default.object(forKey: {{ type.name }}.{{ variable.name }}) as? {{ variable.typeName }} ?? {{ variable.defaultValue }} } set { NSUbiquitousKeyValueStore.default.set(newValue, forKey: {{ type.name }}.{{ variable.name }}) NSUbiquitousKeyValueStore.default.synchronize() } } {% endfor %} } {% endfor %}使用Sourcery内置模板除了自定义模板Sourcery还提供了许多内置模板你可以在Templates/Templates/目录中找到AutoCodable.swifttemplate自动生成Codable实现AutoEquatable.stencil自动生成Equatable实现AutoHashable.stencil自动生成Hashable实现AutoMockable.stencil自动生成Mock对象Sourcery生成模拟对象教程视频封面最佳实践和性能优化1. 批量生成对于大型项目建议使用Sourcery的批量生成功能。创建一个配置文件一次性生成所有需要的代码configurations: - sources: - ./Sources templates: - ./Templates/UserDefaults.stencil - ./Templates/AutoCodable.swifttemplate output: ./Generated args: target: MyApp2. 缓存优化Sourcery支持缓存解析结果显著提高生成速度。在配置文件中启用缓存sources: - ./Sources templates: - ./Templates/UserDefaults.stencil output: ./Generated cacheBasePath: ./SourceryCache3. 集成到Xcode构建流程将Sourcery集成到Xcode的构建流程中确保生成的代码始终是最新的在Xcode中添加Run Script构建阶段添加Sourcery命令将生成的文件添加到项目中常见问题解答Q: Sourcery生成的代码安全吗A: 是的Sourcery生成的代码与手动编写的代码一样安全。它基于SwiftSyntax这是Apple官方的Swift语法分析库。Q: 如何调试模板问题A: 使用--verbose参数查看详细日志或使用--disableCache禁用缓存以确保使用最新的模板。Q: Sourcery支持SwiftUI吗A: 是的Sourcery完全支持SwiftUI。你可以为SwiftUI的AppStorage等属性包装器创建模板。Q: 生成的代码会影响应用性能吗A: 不会。生成的代码在编译时就已经存在运行时没有任何额外开销。开始你的Swift元编程之旅Sourcery不仅限于UserDefaults代码生成它还可以用于自动生成网络层代码创建数据模型转换器生成测试桩stubs和模拟对象mocks自动实现协议一致性生成文档和接口定义通过使用Sourcery你可以将重复的编码工作自动化专注于业务逻辑和创新的实现。开始尝试创建你自己的UserDefaults模板体验Swift元编程的强大能力吧记住好的工具应该让你更高效而不是更忙碌。Sourcery正是这样一个工具——它处理重复的代码让你专注于真正重要的事情。【免费下载链接】SourceryMeta-programming for Swift, stop writing boilerplate code.项目地址: https://gitcode.com/gh_mirrors/so/Sourcery创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考