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

如何使用Firestore用SwiftUI制作动态视图

要在SwiftUI中使用Firestore制作动态视图,你需要遵循以下步骤:

  1. 安装必要的依赖项
    • Swift 5.0
    • SwiftUI 2.0
    • Firebase/Firestore

    npm install firebase npm install swiftui ``` ```bash pip install google-cloud-firestore

  2. 设置Firebase项目
    • 访问Firebase控制台:https://console.firebase.google.com/
    • 创建一个新项目或选择一个现有项目。
    • 在左侧菜单中,点击“项目设置”。
    • 点击“服务帐户”,然后创建一个新的服务帐户密钥。
    • 将生成的JSON密钥文件保存到你的项目目录中。
  3. 配置Firestore
    • 在Firebase控制台中,选择你的项目,然后点击“Firestore Database”。
    • 点击“创建数据库”,选择“生产模式”或“测试模式”。
    • 点击“启用”。
  4. 在SwiftUI项目中配置Firebase
    • 打开你的SwiftUI项目。
    • 在项目导航器中,右键单击项目名称,然后选择“New Group”。
    • 将下载的JSON密钥文件拖放到新创建的组中。
    • 打开项目的Info.plist文件,添加以下内容:

    <key>FirebaseAppID</key> <string>YOUR_FIREBASE_APP_ID</string> <key>GoogleService-Info.plist</key> <string>YOUR_FIREBASE_PROJECT_ID</string>

    • 在项目的AppDelegate.swift文件中,导入Firebase模块并初始化Firebase:

    import Firebase @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() return true } }

  5. 创建Firestore模型
    • 创建一个Swift结构体来表示Firestore中的文档数据:

    struct User: Identifiable { @DocumentID var id: String? let name: String let age: Int }

  6. 创建Firestore视图
    • 创建一个SwiftUI视图来显示Firestore中的数据:

    import SwiftUI import Firebase import FirebaseFirestore struct FirestoreView: View { @StateObject private var firestoreVM = FirestoreViewModel() var body: some View { VStack { List(firestoreVM.users) { user in VStack(alignment: .leading) { Text(user.name) .font(.headline) Text("\(user.age) years old") .font(.subheadline) } } } .padding() .onAppear { firestoreVM.loadData() } } }

  7. 创建Firestore视图模型
    • 创建一个SwiftUI视图模型来处理Firestore数据的加载和状态管理:

    import SwiftUI import Firebase import FirebaseFirestore class FirestoreViewModel: ObservableObject { @Published var users: [User] = [] private var db: FirestoreDatabase init() { db = Firestore.database() } func loadData() { let usersRef = db.collection("users") usersRef.addSnapshotListener { snapshot, error in if let error = error { print("Error fetching data from Firestore: \(error.localizedDescription)") return } guard let documents = snapshot?.documents else { return } let users = documents.compactMap { document in do { let data = try document.data(as: User.self) return data } catch { print("Error decoding user data: \(error.localizedDescription)") return nil } } DispatchQueue.main.async { self.users = users } } } }

  8. 在主视图中使用Firestore视图
    • 在你的SwiftUI项目的主视图中,将FirestoreView添加到视图层次结构中:

    import SwiftUI struct ContentView: View { var body: some View { FirestoreView() } }

现在,当你运行你的SwiftUI应用程序时,它将从Firestore数据库加载用户数据并在屏幕上显示。请确保你的Firestore数据库中有一个名为users的集合,并且其中包含一些用户文档。

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

相关·内容

Ask Apple 2022 与 SwiftUI 有关的问答(上)

使用 environmentObject 的情况下,如何避免创建实例的视图被重新计算Q:如何在避免重新计算顶层视图 body 的情况下,在不同子树的两个子视图之间共享状态( 例如 ObservableObject...阅读 SwiftUI 的动画机制[8] 一文,了解更多有关动画的内容。自适应高度 SheetQ:如何在 iOS16 中呈现与动态内容高度相匹配的 Sheet?...等动态属性。...A:如果你在 iOS 上使用 UITextField 遇到性能问题,你可以尝试避免每个视图都是 UITextField ,默认渲染为 Text ,当文本被点击时动态切换为 UITextField 。...image-20221022135326560San Francisco 宽度风格Q:如何SwiftUI如何使用 SF 字体家族新增的三种宽度风格( Compressed、Condensed、Expanded

12.3K20

Ask Apple 2022 与 SwiftUI 有关的问答(下)

A:没有区别,使用这两种方法可以适当地隐藏图像,使其不被辅助技术所发现!accessibilityHidden 支持任意符合 View 协议的元素,同时可以动态调整它的隐藏状态。...在 SwiftUI 布局 —— 尺寸( 上 )[8] 一文中,对建议尺寸的几种模式都进行了介绍。如何减少主线程的负担Q:如何避免所有操作都被放置在主线上?...阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。创建从底部开始的滚动视图Q:我如何实现一个在底部对齐的滚动视图,在 macOS 上会不会有糟糕的性能?...软弃Q:最近,我注意到新的 @ViewBuilder 函数在以前的版本中是不可用的,弃信息提示我使用新的方法取代老方法,这是 SwiftUI 的 API 设计缺陷还是我错过了什么?...连锁动画Q:在 SwiftUI 中,如何实现连锁动画?例如,我想先给一个视图做动画,当动画完成后立即启动另一个动画。A:不幸的是,目前不可能实现连锁动画。

14.8K30
  • 为什么SwiftUI视图使用结构体?

    SwiftUI中,我们所有的视图都是简单的结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数的结构体,则结构体的整个大小就是:一个整数。没有其他的。...1000个SwiftUI视图甚至100,000个SwiftUI视图也是如此。他们是如此之快,以至于不再值得考虑。...您会发现,类能够自由更改其值,这可能导致代码混乱——SwiftUI如何知道什么更改了值并需要更新UI?...实际上,您不能找到比使用Color.red作为视图的更好的主意:除了“红色填充我的空间”之外,它不包含任何信息。...提示:如果您在视图使用类,则可能会发现代码无法编译或在运行时崩溃。 相信我:使用结构体。

    3.2K10

    高级 SwiftUI 动画 — Part 1:Paths

    每当视图上的可动画参数发生变化时,SwiftUI 就会从旧值到新值制作动画。一些可动画的参数包括大小(size)、偏移(offset)、颜色(color)、比例(scale)等。...当给一个视图制作动画时,SwiftUI 实际上是多次重新生成该视图,并且每次都修改动画参数。这样,它就会从原点值渐渐走向最终值。 假设我们为一个视图的不透明度创建一个线性动画。...SwiftUI 已经为不透明度制作了动画,而不需要我担心这一切。是的,这是真的,但只要 SwiftUI 知道如何将数值从原点插值到终点。对于不透明度,这是一个直接的过程,SwiftUI 知道该怎么做。...一旦我们把这两点做到位,我们将能够在任何数量的边数之间制作动画: 创建可动画数据(animatableData) 为了使形状可动画化,我们需要 SwiftUI 多次渲染视图使用从原点到目标数之间的所有边值...在本文的第二部分,我们将学习如何使用 GeometryEffect 协议。它将打开改变我们的视图和动画的新方法的大门。

    3.8K20

    为什么 SwiftUI视图使用结构体

    我之所以说性能因素,是因为很多人认为这是 SwiftUI 使用结构体的主要原因,而实际上这只是更大范围的一部分。...在 SwiftUI 中,我们所有的视图都是简单的结构体,几乎可以自由创建。想想看:如果您制作一个仅包含一个整数的结构体,则结构体的整个大小就是:一个整数。没有其他的。...1000 个 SwiftUI 视图甚至 100,000 个 SwiftUI 视图也是如此。他们是如此之快,以至于不再值得考虑。...您会发现,类能够自由更改其值,这可能导致代码混乱—— SwiftUI 如何知道什么更改了值并需要更新 UI?...实际上,您不能找到比使用 Color.red 作为视图的更好的主意:除了“红色填充我的空间”之外,它不包含任何信息。

    2.4K50

    苹果全新UI框架来了!可视化编程,自动化减少20%代码量

    来源:Github等 编辑:鹏飞 本文转自公众号:新智元 【导读】SwiftUI是为Apple平台创建用户界面的现代化框架,以前所未有的速度创建漂亮、动态的应用程序。...那么,SwiftUI解决了哪些痛点?带来哪些好处?代码风格如何?敬请阅读本文。 刚刚结束的苹果WWDC推出了一个对于开发者非常重要的框架:SwiftUI。...SwiftUI还提供对动态类型、暗黑模式、本地化和可访问性的自动支持。 SwiftUI都更新了什么? 此次更新主要有5点: 声明式:更加易读的代码。...而SwiftUI通过4种方式,解决了上述问题: 一个新的声明式UI结构,定义了的布局的外观和工作方式 更新UI预览会自动生成新的Swift代码,反之,更改Swift代码也会更新UI预览 Swift中的任何绑定例如有效的...让Xcode for iPad更上一层楼 开发者对Interface Builder的抱怨不是一天两天了,它大大增加了分解视图块以及从视图控制器(view controller)使用视图的工作量,导致出现体积臃肿的视图控制器

    5.4K20

    如何SwiftUI中实现interactiveDismissDisabled

    如何SwiftUI中实现interactiveDismissDisabled 如想获得更好的阅读体验,可以访问我的博客www.fatbobman.com[1] 本文中我们将探讨如何实现一个SwiftUI...3.0中新增功能——interactiveDismissDisabled的增强版;如何创建更SwiftUI化的功能扩展。...去年9月,我在文章【在SwiftUI制作可以控制取消手势的Sheet】[3]中介绍了健康笔记2.0[4]版本的Sheet控制实现方法。...因此,我决定使用类似的方式实现它。 原理 委托 从iOS 13开始,苹果调整了模态视图的委托协议(UIAdaptivePresentationControllerDelegate)。...中制作可以控制取消手势的Sheet】: https://www.fatbobman.com/posts/swiftui-dismiss-sheet/ [4] 健康笔记2.0: https://www.fatbobman.com

    3.9K40

    SwiftUI 的动画机制

    开发者经常需要面对:如何动、怎么动、什么能动、为什么不动、为什么这么动、如何不让它动等等困扰。对 SwiftUI 的动画处理逻辑了解的不够深入是造成上述困扰的主要原因。...本文将尝试对 SwiftUI 的动画机制做以介绍,以帮助大家更好地学习、掌握 SwiftUI 的动画,制作出满意的交互效果。...使用 Transaction 进行更精细的控制 SwiftUI 的官方语言来描述【将时序曲线函数与状态关联的过程】应该是:为视图声明事务( Transaction)。...当状态的改变导致视图树的分支发生变化时,SwiftUI使用其包裹的可动画部件对视图进行动画处理。 使用转场同样需要满足 SwiftUI 动画的三要素。...唯一且稳定的视图标识(无论是结构性标识还是显式标识)有助于避免动画异常 SwiftUI 的动画机制设计的还是相当优秀的,相信随着完成度的不断提高,开发者可以更少的代码获得更加优秀的交互效果。

    14.8K40

    SwiftUI 中用 Text 实现图文混排

    因此,我们必须通过某种手段让图片的尺寸也能自动适应动态类型的改变。使用 SwiftUI 提供的 @ScaledMetric 属性包装器,可以创建能够跟随动态类型自动缩放的数值。...( 不可能预生成如此多尺寸的图片 )是否可以不通过预制标签图片的方式( 动态视图 )来解决当前问题下文中,我将提供三种解决思路和对应代码,利用不同的方式来实现当前的需求。...,需要提供分辨率较高的原始图片,这样会造成更多的系统负担方案二:在 Text 上使用覆盖视图方案二的解决思路不使用预制图片,通过 SwiftUI 视图创建标签根据标签视图的尺寸创建空白占位图片在 Text...,插入 Text 中方案三的解决思路与方案二一样,不使用预制图片,使用 SwiftUI 视图创建标签将标签视图转换成图片添加到 Text 中进行混排TitleWithDynamicImage(title...4 提供的 ImageRenderer 完成视图至图片的转换,因此仅支持 iOS 16+在低版本的 SwiftUI 中,可以通过 UIHostingController 包裹视图的方式,在 UIKit

    4.4K30

    SwiftUI 布局协议 - Part2

    Part 1 - 基础: 什么是布局协议 视图层次结构的族动态 我们的第一个布局实现 容器对齐 自定义值:LayoutValueKey 默认间距 布局属性和 Spacer() 布局缓存 高明的伪装者 使用...因此当我们使用上一部分中描述的"欺骗"的技巧,我们必须使用 DispatchQueue 队列更新。...视图的缩放和旋转要再一次使用双向自定义值实现。 在这个例子中在容器中一共有44个视图,所以我们的新容器将会分别以12,12,12和8为一圈。 注意本案例中如何使用缓存与子视图通信。...使用绑定参数 今年 SwfitUI Lounges 出现了一个有趣的问题,询问是否可能使用新的布局协议去创建一个层次树,线连接。挑战的不是视图树结构,而是我们如何画连接线。...注意这是基本实现,仅用于说明如何实现。还有许多潜在的优化,但制作树布局所需的关键元素都在这里。

    2.7K30

    我庆幸果断放弃了SwiftUI:它还不够成熟

    新框架使用声明性范例,让开发者更少的代码编写相同的 UI。 SwiftUI 的愿景是降低开发 iOS 门槛,吸引更多开发者、丰富 iOS 的业态。...这些年,也有一些 SwiftUI 重写 UIKit 应用程序的案例,去年奈飞新版 iOS App 的登录界面也完全由 SwiftUI 重构。...这是一项很好的技术,响应式方法非常适合许多典型的基于视图的需求,但对如何处理边缘情况,文档中非常缺乏相关的说明。” “这是个好主意,但 SwiftUI 的主要问题是完全不成熟。”...利用这款工具,我可以多个 sprite 拼接成复杂的资产,再最终为它们制作动画。它的显示效果就是主窗口中的一张表,出于学习的目的,我当然还是想继续 SwiftUI 喽。...这可以说是压死骆驼的最后一根稻草了,我决定放弃 SwiftUI,继续 AppKit。 总    结 其实没能在项目中用到 SwiftUI,会让我感觉有点遗憾。

    5K20

    SwiftUI 布局 —— 尺寸( 上 )

    但由于 SwiftUI视图并没有提供尺寸这一属性,因此即使在 SwiftUI 诞生了数年后的今天,如何获取视图的尺寸仍然是网络上的热门问题。...淡化尺寸概念的初衷或许是出于以下两点: 引导开发者转型到声明式编程逻辑,转变使用精准尺寸的习惯 掩盖 SwiftUI 中复杂的尺寸概念,减少初学者的困扰 但无论如何淡化或掩盖,当涉及更加高级、复杂、精准的布局时...建议尺寸在布局的两个阶段(讨价还价、安置子民)均会提供,但通常我们只需在第一个阶段使用它( 可以在第一阶段 catch 保存中间的计算数据,减少第二阶段的计算量 )。...例如:ZStack 会将其父视图提供给它的建议模式直接转发给 ZStack 的子视图,而 VStack、HStack 则会要求子视图返回全部模式下的需求尺寸,以判断子视图是否为动态视图( 在特定维度可以动态调整尺寸...( 已处理动态尺寸视图 )的总尺寸,详情请参阅 SwiftUI 布局 —— 对齐[4] 其他控件例如 TextField、TextEditor、Picker 等 需求尺寸取决于建议尺寸和实际显示尺寸 在

    4.8K20

    优化在 SwiftUI List 中显示大数据集的响应效率

    本文将通过一个优化列表视图的案例,展现在 SwiftUI 中查找问题、解决问题的思路,其中也会对 SwiftUI 视图的显式标识、@FetchRequest 的动态设置、List 的运作机制等内容有所涉及...在 SwiftUI 视图的生命周期研究[3] 一文中,我对 List 如何对子视图的显示进行优化做了一定的介绍。...在 SwiftUI 中为视图设置显式标识目前有两种方式: 在 ForEach 的构造方法中指定 由于 ForEach 中的视图数量是动态的且是在运行时生成的,因此需要在 ForEach 的构造方法中指定可用来标识子视图的...虽然我们已经找到了导致进入列表视图卡顿的原因,但如何在不影响效率的情况下通过 scrollTo 来实现到列表端点的滚动呢?...不使用 @FetchRequest 或 NSFetchResultController 等动态管理方式,数组来持有数据 通过设置 NSPredicate 、NSSortDescription 和 fetchRequest.fetchLimit

    9.2K20

    SwiftUI 中实现视图居中的若干种方法

    欢迎大家在 Discord 频道[2] 中进行更多地交流将某个视图在父视图中居中显示是一个常见的需求,即使对于 SwiftUI 的初学者来说这也并非难事。...center 进行对齐那么是否可以 background 实现类似的样式呢?...万变不离其宗,掌握了 SwiftUI 的布局原理,无论需求如何变化都可轻松应对。...我为本文这种通过多种方法来解决一个问题的方式添加了【小题大作】标签,目前使用该便签的文章还有:在 Core Data 中查询和使用 count 的若干方法[6]、在 SwiftUI 视图中打开 URL...我正以聊天室、Twitter、博客留言等讨论为灵感,从中选取有代表性的问题和技巧制作成 Tips ,发布在 Twitter 上。

    6.8K40

    SwiftUI 布局 —— 对齐

    alignmentGuide 修饰器 在 SwiftUI 中,开发者可以使用 alignmentGuide 修饰器来修改视图某个对齐指南的值( 为对齐指南设定显式值,有关显式值见下文)。...这就是尽管开发者很少会在 alignmentGuide 中关心并使用对齐指南的显式值,但它在 SwiftUI 中仍十分重要的原因。...下面的代码片段来自本文附带的源码 —— Layout 协议仿制 ZStack 。...VStack、HStack、ZStack 等支持多视图的布局容器 你是否了解 SwiftUI 常用布局容器构造方法中的对齐参数的含义?它们又是如何实现的呢?...如果你想对 Layout 协议做更全面地了解,推荐你观看 ChaoCode 制作的有关 SwiftUI Layout 协议的视频 —— 自订 Layout 排版教学[5] 。

    6.4K20

    如何在Xcode下预览含有Core Data元素的SwiftUI视图

    如何在Xcode下预览含有Core Data元素的SwiftUI视图SwiftUI诞生之日起,预览(Canvas Preview )一直是个让开发者又爱又恨的功能。...在预览含有Core Data元素的视图时崩溃的出现次数会愈发频繁,在某种程度上可能已经影响了开发者在SwiftUI使用Core Data的热情。...结合两年来我在SwiftUI使用Core Data的经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃的部分原因•如何在之后的开发中避免类似的崩溃出现•如何在Xcode中安全可靠地预览含有...SwiftUI提供的managedObjectContext环境值为在视图使用或操作Core Data元素提供了基础和便利。...由于前文中提到的SwiftUI App life cycle的独特性,你无法在根视图使用单例来注入持久化上下文。

    5.1K10

    肘子的 Swift 周报 #023 | 为应用配备隐私清单

    这一要求源自 2023 年 WWDC 上的新政策,旨在让应用开发者及 SDK 制作者明确声明其应用的隐私操作。...前一期内容|全部周报列表 原创 几个在 SwiftUI使用惰性容器的技巧和注意事项[2] [Fatbobman( 东坡肘子)](https://twitter.com/fatbobman "Fatbobman...这些容器的设计精妙,它们仅在必要时才动态地构建和加载视图,从而显著优化了应用的性能和内存使用效率。...自定义遵循 RandomAccessCollection 的实现 实现无限数据加载 id 修饰器对 List 懒加载机制的影响 在惰性容器中,SwiftUI 仅保留 ForEach 子视图最顶层的状态...制造商还提供了 SDK,以支持开发者为 Playdate 制作新游戏。Rauhul Varma 在这篇文章中分享了他使用 Swift 新开发的嵌入式语言模式为 Playdate 创建游戏的经历。

    11810

    SwiftUI 4.0 的全新导航系统

    ,那么 NavigationSplitView 便是在二维的空间中于不同的栏之间动态切换视图。...动态控制多栏显示状态 另一个之前困扰多栏 NavigationView 的问题就是,无法通过编程的手段动态地控制多栏显示状态。...4.0 之前的版本上使用类似的功能,可以参考我在 NavigationViewKit 增强 SwiftUI 的导航视图[4] 一文中的实现方法 其他增强 除了上述的功能, 新的导航系统还在很多其他的地方也进行了增强...相当一部分开发者由于版本适配的原因并不会使用新的 API ,因此,每个人都需要认真考虑如下问题: 如何从新 API 中获得灵感 如何在老版本中运用编程式导航思想 如何让新老版本的程序都能享受系统提供的便利...下对 iPad 进行适配: https://www.fatbobman.com/posts/swiftui-ipad/ [4] NavigationViewKit 增强 SwiftUI 的导航视图

    10.3K62

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

    没错,是时候让您的应用更上一层楼并学习如何添加视频流了! 您将为所有这些旅行视频博主构建一个新应用程序。 有些人想制作关于他们旅行的艺术电影,有些人想在自己舒适的床上享受这些体验。...3) VideoPlayer 是一个方便的 SwiftUI 视图,需要播放器对象才能发挥作用。 您可以使用它来播放视频。 4) 默认情况下,SwiftUI 视图考虑设备的安全区域。...AVPlayerLayer } 为了能够在 SwiftUI使用视图,您需要使用 UIViewRepresentable 创建一个包装器。...Trying Not to Steal the Show 如果您打算制作一个包含视频的应用,那么考虑您的应用将如何影响您的用户非常重要。 是的,这听起来非常明显。...如果你想使用画中画,你需要使用 AVPlayerViewController,它属于 UIKit。 好处是你知道如何SwiftUI 和 UIKit 之间建立桥梁。

    7K10

    肘子的 Swift 周报 #045| 我们需要更多的《悟空》

    作为中国游戏开发厂商制作的第一款真正意义上的 3A 游戏,《悟空》受到了中国玩家的广泛关注。其在上市前展现的游戏品质,也赢得了全球范围玩家的期待。...,允许开发者就地声明和根据状态动态展示或隐藏表单。...活动中探讨了使用 SwiftUI 开发的挑战和机遇,并在文章中详细介绍了解决策略。...作者强调,尽管面临挑战,SwiftUI 的跨平台动态应用开发潜力巨大,是连接技术感知与现实的桥梁,有助于开发者与设计师之间的紧密合作。 2024 年表情符号标准的复杂状态 ( The (too?)...这使得开发者可以在 SwiftUI 视图中直接使用这些生成的符号,而无需使用字符串引用,从而减少错误并利用自动完成和编译器验证。

    9610
    领券