【问题标题】:SwiftUI, handling user inputsSwiftUI,处理用户输入
【发布时间】:2021-03-25 02:02:42
【问题描述】:

我是 SwiftUI 初学者,对 UIKIT 或更早版本的 Swift 编程知识了解为 0。 我正在使用 SwiftUI 制作一个非常简单的 IOS 应用程序,只是为了练习。 问题是我应该用什么来处理用户输入和数据? 我想让它像,如果用户输入一些输入,这些输入将被保存和显示,并且在用户删除或更新之前不应删除或更新任何数据。 有人提到 Core Data、Combine、Userdefaults 等。 谁能给我一个建议?

【问题讨论】:

  • 相当广泛的问题。查看一些 SwiftUI 教程并从那里开始可能是一个很好的步骤——它们都会以一种或另一种方式处理用户输入。
  • 请指定您需要的问题。你可能会看到apples user input tutorial for swift ui here
  • 我查看了教程,但在教程中,当您重新启动应用程序时,无论您标记为收藏什么,它们都消失了,您会看到重置的屏幕。为了防止丢失用户数据,我应该使用 Core Data 吗?
  • Core Data 和 UserDefaults 是两个常见的选项。

标签: swiftui


【解决方案1】:

您的困难似乎是 SwiftUI,而不是您使用的那种后端数据存储。

SwiftUI 让初学者感到困惑,特别是如果您习惯于命令式编程(常规过程和函数)。它改为使用声明式编程方法。

如果您了解这些原理,您可以轻松掌握使用它开发应用程序的技巧,这些是要点:

  1. 我发现最好的想法是“这不是一个程序,它是一个呈现的脚本”——有点像 HTML。将其视为静态页面。

  2. 现在,这个“静态页面”会根据一些基础数据更改其外观,而不是运行一个程序来主动更改(例如颜色)外观,而是重新加载整个页面! (称为状态)。在下面的示例中,当您点击文本时,整个页面会以新颜色重新加载。

  3. 这个拼图还有最后一块 - Swift UI 使用少量编程(称为闭包)来捕获用户的输入(例如手指点击)并更改后端数据(状态),例如:

     @State var aColor: Color
    
     var body: some View {
         Text("Hello, world!")
             .foregroundColor(aColor)
             .onTapGesture {
    
                 // A little bit of programming called a Closure
    
                 if aColor == Color.red {
                     aColor = Color.green
                 } else {
                     aColor = Color.red
                 }
             }
     }
    

请注意,在上面的示例中,我使用了本地 State 变量。通常,您正在使用的数据更有可能保存在“ObservableObject”中的其他位置,并通过如下代码行访问:

@EnvironmentObject var myData: myDataClass

这使您可以将数据操作的东西放在它自己的类中。

【讨论】:

  • 非常感谢......我有点明白你在说什么。你会推荐我可以练习的任何示例代码或真实应用程序的模板吗?我查看了 github 并看到了 20,30 个应用程序代码,但它们都没有真正有用,因为它们只是向我展示了如何解码 json 文件,并没有真正将用户的输入作为输入。我想知道的是,一旦我使用文本字段获得用户的输入,在哪里以及如何正确和持久地存储它们......
  • 通常你会在应用启动时创建一个对象(在@main App 中创建)。这是您放置数据的地方(反过来,该对象将数据保存到 CoreData 或其他地方)。然后使用 .environmentObject 修饰符将该对象传递给 SwiftUI ContentView。然后,您可以使用我在答案中提到的闭包获取和设置数据对象中的值。对于可编辑的文本字段,有一个名为 .onEditingChanged() {} 的修饰符 - 在此处添加代码以将文本字段值保存回您的数据对象。
  • 只需谷歌搜索@AppStorage。有很多来源(例如来自 Paul Hudsons Hacking With Swift)。这是处理存储在UserDefaults 中的数据的便捷方式。我建议您通过 100 天的 SwiftUI 学习基础知识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2011-08-10
  • 2015-07-25
  • 2012-11-09
相关资源
最近更新 更多