{"id":15055306,"url":"https://github.com/williewangwei/swiftui-tutorials","last_synced_at":"2025-04-08T04:13:48.905Z","repository":{"id":52241731,"uuid":"190505979","full_name":"WillieWangWei/SwiftUI-Tutorials","owner":"WillieWangWei","description":"A code example and translation project of SwiftUI. / 一个 SwiftUI 的示例、翻译的教程项目。","archived":false,"fork":false,"pushed_at":"2020-02-10T03:43:35.000Z","size":74507,"stargazers_count":2428,"open_issues_count":4,"forks_count":316,"subscribers_count":63,"default_branch":"master","last_synced_at":"2025-04-08T04:13:39.787Z","etag":null,"topics":["chinese","chinese-translation","combine","examlpes","ios","ios-app","ios-demo","ios-swift","ios-ui","swift","swiftui","swiftui-animations","swiftui-example","swiftui-tutorials","swiftuiexa","translation","tutorial","uiframework","watchos","xcode"],"latest_commit_sha":null,"homepage":"https://github.com/WillieWangWei/SwiftUI-Tutorials","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WillieWangWei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-06T03:14:13.000Z","updated_at":"2025-03-28T17:31:00.000Z","dependencies_parsed_at":"2022-08-30T22:52:15.488Z","dependency_job_id":null,"html_url":"https://github.com/WillieWangWei/SwiftUI-Tutorials","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WillieWangWei%2FSwiftUI-Tutorials","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WillieWangWei%2FSwiftUI-Tutorials/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WillieWangWei%2FSwiftUI-Tutorials/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WillieWangWei%2FSwiftUI-Tutorials/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WillieWangWei","download_url":"https://codeload.github.com/WillieWangWei/SwiftUI-Tutorials/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247773719,"owners_count":20993639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chinese","chinese-translation","combine","examlpes","ios","ios-app","ios-demo","ios-swift","ios-ui","swift","swiftui","swiftui-animations","swiftui-example","swiftui-tutorials","swiftuiexa","translation","tutorial","uiframework","watchos","xcode"],"created_at":"2024-09-24T21:40:36.734Z","updated_at":"2025-04-08T04:13:48.878Z","avatar_url":"https://github.com/WillieWangWei.png","language":"Swift","readme":"![](https://repository-images.githubusercontent.com/190505979/0618a700-889e-11e9-9543-7cf88db49659)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/WillieWangWei\"\u003e\u003cimg src=\"https://img.shields.io/badge/language-swift-orange.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/WillieWangWei\"\u003e\u003cimg src=\"https://img.shields.io/github/repo-size/WillieWangWei/SwiftUI-Tutorials.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/WillieWangWei/SwiftUI-Tutorials/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/WillieWangWei/SwiftUI-Tutorials.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e **构建示例项目需要以下环境：**\n\u003e \n\u003e * macOS 10.15 Catalina 或更高\n\u003e * Xcode 11.1 或更高\n\n# 概述 \n\n对于初步学习和使用 `SwiftUI` 的开发者来说，官方教程无疑是最好的范例。它以构建一个 App 为脉络，串联出了 `SwiftUI` 重要的知识点，并主动抛出开发中一些常见的问题，然后用 `SwiftUI` 给出了解决方案。通过阅读此教程，你将逐步获得使用 `SwiftUI` 开发 App 的技能和思想。\n\n此项目为 [SwiftUI Tutorials](https://developer.apple.com/tutorials/swiftui) 的翻译及代码示例，具体内容请翻阅：\n\n**🎉 [SwiftUI 教程（中文）](https://github.com/WillieWangWei/SwiftUI-Tutorials/wiki)**\n\n项目中的代码为完成所有教程后的最终成品，你可以直接体验多种 `SwiftUI` 特性。另外，你也可以在每个教程章节中下载对应的起始和完成代码。\n\n完成本教程，你将获得一个这样的 App 以及一套精彩的 `SwiftUI` 代码：\n\n| 平台 | 预览 |\n| - | - |\n| iOS | ![](https://github.com/WillieWangWei/SwiftUI-Tutorials/blob/master/preview-iOS.gif) |\n| watchOS | ![](https://github.com/WillieWangWei/SwiftUI-Tutorials/blob/master/preview-watchOS.gif) |\n| macOS | ![](https://github.com/WillieWangWei/SwiftUI-Tutorials/blob/master/preview-macOS.gif) |\n\n\u003e **觉得不错？给个 Star 或 Follow 👌**\n\n## 更新日志\n\n| 版本 | 内容 |\n| - | - |\n| v1.0.0 | 完成初版 |\n| v1.0.1 | 同步官方文档\u003cbr\u003e增加成品预览 |\n| v1.0.2 | 同步官方文档\u003cbr\u003e优化翻译，修复翻译错误，让阅读更流畅\u003cbr\u003e增加了代码高亮\u003cbr\u003e标记出了代码修改范围，便于上下文对比 |\n| v1.0.3 | 新增章节《创建 watchOS App》\u003cbr\u003e修复代码bug\u003cbr\u003e增加 watchOS App 成品预览\u003cbr\u003e |\n| v1.0.4 | 同步官方文档 |\n| v1.0.5 | 添加 Wiki 子模块 |\n| v1.0.6 | 新增章节《创建 macOS App》 |\n\n## 调整\n\n### 图片\n\n为了优化阅读体验，部分图片加上了 `#000000`  `50%`  `10 Blur` 的阴影。\n\n### 视频\n\n由于 `GitHub Wiki` 的限制，所有视频已转码成 `GIF` 。\n\n### 代码\n\n在实际编码中，由于本地环境和官方教程不一致，导致部分方法的声明和调用方式、代码风格等与官方教程有细微出入，例如：\n\n官方教程：\n\n```Swift\n.\n.\n.\nstruct MapView: UIViewRepresentable {\n    func makeUIView(context: Context) -\u003e MKMapView {\n        MKMapView(frame: .zero)\n    }\n}\n.\n.\n.\n```\n\n这里的 `UIViewRepresentable` 是一个协议，它的声明中包含一个 `associatedtype` :\n\n```Swift\n/// The type of `UIView` to be presented.\nassociatedtype UIViewType : UIView\n```\n\n在开发中，给此 `associatedtype` 赋值后 Xcode 对方法的签名补全会有变化，最终写作：\n\n```Swift\n.\n.\n.\nstruct MapView : UIViewRepresentable {\n    \n    typealias UIViewType = MKMapView\n    \n    func makeUIView(context: UIViewRepresentableContext\u003cMapView\u003e) -\u003e MKMapView {\n        return MKMapView(frame: .zero)\n    }\n}\n.\n.\n.\n```\n\n如此修改不再一一列举，只需记得**此类修改不会改变原教程的构建结果**即可，不必过于纠结。\n\n## 微信技术群\n\n`SwiftUI` 代表未来构建 App 的方向，欢迎加群一起交流技术，解决问题。\n\n**加群现在需要申请了，可以先加我微信，备注 \"SwiftUI\"，我会拉你进群。**\n\n![](https://raw.githubusercontent.com/WillieWangWei/Flutter-Debug/master/Wechat.png)\n\n## Stargazers over time\n\n![Sparkline](https://stars.medv.io/WillieWangWei/SwiftUI-Tutorials.svg)\n\n![Stargazers over time](https://starchart.cc/WillieWangWei/SwiftUI-Tutorials.svg)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](https://github.com/WillieWangWei/SwiftUI-Tutorials/blob/master/LICENSE) file for details.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliewangwei%2Fswiftui-tutorials","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliewangwei%2Fswiftui-tutorials","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliewangwei%2Fswiftui-tutorials/lists"}