Swift(UI) 错误:无法在不可变值上使用变异成员:“self”是不可变的

2024-04-29

基本上我想做的是,如果您按下按钮,那么条目应该获得一个新的 CEntry。如果有人能帮助我那就太好了。谢谢!

struct AView: View {

   var entries = [CEntries]()

   var body: some View {
       ZStack {
           VStack {
               Text("Hello")
               ScrollView{
                   ForEach(entries) { entry in
                       VStack{
                        Text(entry.string1)
                        Text(entry.string2)
                    }
                }
            }
        }
        Button(action: {
            self.entries.append(CEntries(string1: "he", string2: "lp")) <-- Error
        }) {
            someButtonStyle()
        }
    }
}

}


C世纪级

 class CEntries: ObservableObject, Identifiable{
    @Published var string1 = ""
    @Published var string2 = ""

    init(string1: String, string2: String) {
        self.string1 = string1
        self.string2 = string2
    }
}

SwiftUI 中的视图是不可变的。您只能改变它们的状态,这是通过更改具有@State属性包装器:

@State var entries: [CEntries] = []

但是,虽然您可以这样做,但就您而言CEntries是一个类 - 即引用类型 - 所以虽然你可以检测到数组中的变化entries- 添加和删除元素,您将无法检测元素本身的变化,例如当.string1属性已更新。

但这并没有帮助,因为它是一个ObservableObject.

相反,改变CEntries成为一个struct- 值类型,因此如果它改变,值本身也会改变:

struct CEntries: Identifiable {
    var id: UUID = .init()
    var string1 = ""
    var string2 = ""
}

struct AView: View {

   @State var entries = [CEntries]() 

   var body: some View {
       VStack() {
          ForEach(entries) { entry in
             VStack {
                Text(entry.string1)
                Text(entry.string2)
             }
          }
          Button(action: {
            self.entries.append(CEntries(string1: "he", string2: "lp"))
          }) {
              someButtonStyle()
          }
      }
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift(UI) 错误:无法在不可变值上使用变异成员:“self”是不可变的 的相关文章

  • 如何在 tvOS 中添加检测按钮按下情况?

    我已经遵循这个tutorial http jamesonquave com blog developing tvos apps for apple tv with swift 一切正常 我遇到的唯一问题是我不知道如何检测何时按下按钮 提前致
  • 数组排序错误:“二元运算符 '<' 无法应用于两个 'Int?'操作数”

    这是按 tableView 时间戳中的每个单元格对数组进行排序的代码 self ProjectsArray sorted by project project2 gt Bool in return project timestamp int
  • 在 SwiftUI App 中实现深色模式切换

    我目前正在我的应用程序中研究深色模式 虽然由于我的 SwiftUI 基础 深色模式本身并不困难 但我正在努力选择将 ColorScheme 设置为独立于系统 ColorScheme 的选项 我在苹果人机界面指南中找到了这一点 https i
  • IOS Swift 从数组中搜索表

    我刚刚开始学习 swift 我正在研究 tableview 和 searchbar 功能 下面我有我的数组 它是水果列表 var fruits String Apple Green Pear Green Banana Yellow Oran
  • 如何使用自定义布局跳转到 UICollectionView 中的任何 Cell?

    我的水平 UICollectionView 中有 40 个单元格和一个按钮 当我点击按钮时 我可以从 5 号单元格跳转到 10 号单元格 但是一旦我想要转到另一个单元格 例如从 5 到 25 它不起作用 而是变为 0 code func s
  • Swift 中的自定义输入视图

    我花了几个小时试图弄清楚如何创建 然后定制inputView上班 我有一个网格TextInputs 想想拼字板 按下时应该加载自定义inputView插入文本 我创建了一个 xib文件包含UI elements为定制inputView 我能
  • Swift 5 MacOS 图像调整大小内存问题

    我是使用 Swift 进行 Mac OS 应用程序开发的新手 但我尝试制作简单的 ImageResizer 应用程序 我必须调整 50k 图像的大小 10个小时后 内存已增加到近120GB 我以为 Swift 也有垃圾收集器 为什么它可以增
  • 协议本身不符合?

    为什么这段 Swift 代码无法编译 protocol P struct S P let arr P S extension Array where Element P func test
  • Swift 错误:无法从 AST 上下文获取模块“My_App”

    我正在使用 Swift 3 Xcode 8 1 CocoaPods 1 1 1 运行后pod update 每次我尝试使用 Xcode 的 lldb 控制台时 它都会打印错误 例如 po self输出 共享 Swift 状态My App已出
  • 具有自签名证书的 Alamofire / ServerTrustPolicy

    我想使用 Alamofire 通过带有自签名证书的 https 连接与我的服务器进行通信 我的环境在本地主机上运行 我尝试连接 但响应始终如下所示 Success false Response String nil 我用下面的代码完成了它
  • 如何让应用更新以吸引人的屏幕形式提供给用户? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我最近在使用 Make My Trip 应用程序 我发现每当我启动应用程序时都会出现一个非常有吸引力的应用程序更新弹出屏幕 它说要更新应用程
  • 使用 iOS swift AVPlayer 在横向模式下不全屏

    我将视频视图设置为全屏 然而 在模拟器中玩时 它并没有全屏运行 此问题仅适用于 iPad 不适用于 iPhone 这是我的代码 override func viewDidAppear animated Bool super viewDidA
  • 解包可选值时意外发现 nil - 使用 ALAMOFIRE

    我正在尝试使用 Alamofire 获取 JSON 格式的数据 当我使用一个 URL 时 它工作正常 当我使用另一个 URL 时 我在解包可选值时收到错误 我似乎无法追踪错误来自哪里 我已采取将代码放入 ViewDidLoad 来跟踪错误
  • 无法在 Swift 中创建文件路径

    我尝试在 Swift 中打开该文件 为此 我创建了文件路径 这不起作用 maaaacy pwd Users tsypa maaaacy cat a txt test maaaacy a swift nil maaaacy 剧本 usr bi
  • 如何快速从解析中加载图像?

    我想知道是否有人可以帮助我 我是应用程序开发的新手 我正在从我的应用程序上传图像以在解析文档的帮助下毫无问题地进行解析 let imageData UIImagePNGRepresentation scaledImage let image
  • Carthage 更新错误:“GitHub API 请求失败:凭据错误”

    这是我的购物车文件 Kanna HTML parsing library github tid kijyun Kanna gt 1 0 0 Realm database ORM github realm realm cocoa 当我跑步时c
  • 从 AVAudioRecorder 获取分贝

    我正在尝试从 AVAudio 录音机获取分贝值 这是我目前的代码 我有一个启动录音机的方法 然后是一个读取分贝值的方法 var recorder AVAudioRecorder 全局定义的记录器 然后在此处使用 func init reco
  • 如何将图像转换为 UIImage?

    如何转换 SwiftUIImage to a UIImage let image Image systemName circle fill let UIImage image as UIImage 没有直接的方法将 Image 转换为 UI
  • Audiokit 修剪音频

    我正在制作音频编辑应用程序 我想修剪我的音频 对于音频编辑 我使用 AudioKit 框架 但我在教程和示例中找不到如何使用此框架修剪音频 异步导出允许设置开始和结束样本 https github com AudioKit AudioKit
  • 未捕获的 Kotlin 异常:kotlin.native.In CorrectDereferenceException:非法尝试访问非共享

    我尝试使用 Kotlin MPP Multiplatform 开发 Android 和 iOS 之间的共享库 但我面临着 iOS 中线程的问题 对于我在 iOS 中的应用程序 我在主线程中建立了对象 但它可能调用其他线程中的函数并抛出此异常

随机推荐