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

为什么我收到这个错误“无法分配给属性:'blurb‘是一个get-only属性”- SwiftUI

这个错误是由于在SwiftUI中尝试给一个只读属性(get-only property)赋值而导致的。在SwiftUI中,有些属性是只读的,意味着你只能获取它们的值,而不能对它们进行赋值操作。

要解决这个错误,你需要检查代码中是否有尝试给一个只读属性赋值的地方。通常情况下,这种错误会出现在你试图在视图中修改一个由@State、@Binding或@ObservedObject修饰的属性时。

在SwiftUI中,@State用于声明一个可以在视图内部修改的状态属性,@Binding用于将一个属性绑定到另一个视图中的属性,@ObservedObject用于观察一个外部对象的属性变化。这些属性都是可读写的。

如果你想要修改一个只读属性,你可以考虑将其改为可读写的属性,或者使用其他适合的属性包装器来实现你的需求。

以下是一些可能导致这个错误的常见情况和解决方法:

  1. 如果你尝试在视图中修改一个由@State修饰的属性,确保你在属性声明前添加了@State修饰符,并且在修改属性时使用$符号来访问属性的可写版本。例如:
  2. 如果你尝试在视图中修改一个由@State修饰的属性,确保你在属性声明前添加了@State修饰符,并且在修改属性时使用$符号来访问属性的可写版本。例如:
  3. 如果你尝试在视图中修改一个由@Binding修饰的属性,确保你在属性声明前添加了@Binding修饰符,并且在修改属性时使用$符号来访问属性的可写版本。同时,确保你在使用该属性的父视图中将其绑定到另一个属性。例如:
  4. 如果你尝试在视图中修改一个由@Binding修饰的属性,确保你在属性声明前添加了@Binding修饰符,并且在修改属性时使用$符号来访问属性的可写版本。同时,确保你在使用该属性的父视图中将其绑定到另一个属性。例如:
  5. 如果你尝试在视图中修改一个由@ObservedObject修饰的属性,确保你在属性声明前添加了@ObservedObject修饰符,并且在修改属性时使用对象的可写版本。同时,确保你在使用该属性的父视图中将其观察对象传递给@ObservedObject修饰符。例如:
  6. 如果你尝试在视图中修改一个由@ObservedObject修饰的属性,确保你在属性声明前添加了@ObservedObject修饰符,并且在修改属性时使用对象的可写版本。同时,确保你在使用该属性的父视图中将其观察对象传递给@ObservedObject修饰符。例如:

通过检查代码中的这些情况,并根据需要进行修复,你应该能够解决这个错误。请注意,这只是一种常见情况的解决方法,具体解决方法可能因你的代码结构和需求而有所不同。

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

相关·内容

SwiftUI数据流之State&Binding

struct的拷贝,所以其中一个View的struct值发生变化,对另一个没有影响;反之,如果class则会互相影响; 当User一个结构体时,每次我们修改这个结构体的属性时,Swift实际上在创建一个新的结构体实例...类不需要mutating关键字,因为即使类实例被标记为常量,Swift仍然可以修改变量属性。 如果User一个类,属性本身就不会改变,所以@State不会注意到任何东西,也无法重新加载视图。...,注释1-3处,分别标记了修改结果和提示错误,显然flag可以被修改,而anotherFlag不可以,这是为什么?...计算属性setter 在setter属性中,self默认mutating,可以被修改;我们不能给一个不可变的量赋值,可以通过声明setter nonmutating使属性可赋值,这个nonmutating...,类型State,这个变量内部属性_value类型User;这意味着,加了@State属性包装器的user实例变量,由本身的User类型转变为一个新的State类型,这个转变完成的新类型实例

4K30

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

一般来说,性能瓶颈不在写入 @Published 属性的周围。建议的方法在主线程之外做任何昂贵的或阻塞的工作,然后只在需要写入 ObservableObject 上的属性时再跳回主线程。...这个技巧对于处于屏幕的顶部或底部的视图十分有用。详情请参阅 推文[15] 。动画转场Q:为什么下面的代码没有显示动画转场。...连锁动画Q:在 SwiftUI 中,如何实现连锁动画?例如,想先给一个视图做动画,当动画完成后立即启动另一个动画。A:不幸的,目前不可能实现连锁动画。...其中 2 个自定义形状( 基本上圆角矩形,只有两个角圆的 ),其中一个矩形。编译器抛出一个错误,说它花了太多时间来检查视图的类型。...但这个滚动有两大问题,1、一个未公开的半成品,有可能会被从 SwiftUI 框架中移除;2、不支持懒加载,即使和 Lazy 视图一起使用也会一次性加载全部的视图。

14.7K30

SwiftUI geometryGroup() 指南:从原理到实践

在 WWDC 2023 中,苹果为 SwiftUI 添加了一个新的修饰器:geometryGroup()。它可以解决一些之前无法处理或处理起来比较困难的动画异常。...在创建黄色圆形时,它无法获得状态改变前的 topLeading 位置信息,因此无法满足我们的要求。 本节涉及到 transaction 以及 SwiftUI 动画的一些内部运行机制。...出现 “Some Cases” 的条件 至此,我们就可以将官方文档中 “In some cases” 的条件补充完整: 父视图的几何属性发生改变,且改变动画化的 在父视图改变的同时( 几何属性的变化...} } https://cdn.fatbobman.com/geometryGroup-demo5_2023-11-27_10.10.26.2023-11-27%2010_11_10.gif 这个问题从...在实际开发中,尤其面对复杂动画和布局的场景时,理解并正确使用 geometryGroup() 至关重要的。 geometryGroup() 为我们提供了一个避免在个别情况下出现布局异常的能力。

25910

SwiftUI @State @Published @ObservedObject 深入理解和使用

@State允许我们绕过结构体的限制:我们知道不能更改它们的属性,因为结构固定的,但是@State允许SwiftUI将该值单独存储在可以修改的地方。...提示:在SwiftUI中存储程序状态有几种方法,您将学习所有这些方法。@State专门为存储在一个视图中的简单属性而设计的。...@Published + @ObservedObject 介绍 @PublishedSwiftUI最有用的包装之一,允许我们创建出能够被自动观察的对象属性SwiftUI会自动监视这个属性,一旦发生了改变...比如我们定义的数据结构Model,前提 @Published 要在 ObservableObject 下使用 然后用 @ObservedObject 来引用这个对象,当然@State 不会报错,但是无法更新...() 方法告诉View 层 更新 但是这个就是绝对的了吗?

3K10

避免 SwiftUI 视图的重复计算

随着近年来有关 SwiftUI 的文章与书籍越来越多,开发者应该都已经清楚地掌握了 —— “视图状态的函数” 这一 SwiftUI 的基本概念。...视图类型( 符合 View 协议 )的构造参数 例如 onReceive 这类的事件源 一个视图可以包含多个不同种类的 Source of Truth,它们共同构成了视图状态( 视图的状态个复合体...符合 DynamicProperty 协议的属性包装器 几乎每一个 SwiftUI 的使用者,在学习 SwiftUI 的第一天就会接触到例如 @State、@Binding 这些会引发视图更新的属性包装器...并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应的视图。 SwiftUI 上有一个困扰了不少人的问题:为什么无法在视图的构造函数中,更改 State 包装的变量值?...,更希望大家将关注点集中于这些技巧在背后对应的原理。

9.2K81

如何在 Swift 中取消一个后台任务

如果一个下载被取消,而随后的下载又迅速开始,这可能会在用户界面上造成问题———第一个任务的isDownloading属性被设置为false,效果停止了第二次下载。...模拟文件下载的循环根据两个条件从 for 循环更新为 while 循环: 取消标志的值 false 文件正在下载 这解决了这个问题,但是有一个额外的标志来取消下载似乎太多余了。...Task 创建一个状态属性,并在下载按钮操作的视图中将任务分配给属性。...任务一旦被取消,就无法取消。检查任务是否已被取消的一种方法使用 checkCancellation,这将引发错误。另一种简单地使用 isCancelled 作为布尔标志来查看任务是否已被取消。...一旦一个任务被取消,就不能再取消了。检查一个任务是否被取消的一种方法使用checkCancellation,这将抛出一个错误

2.7K30

TCA - SwiftUI 的救星?(一)

也就是说,我们需要相信 SwiftUI 中 State -> View 的过程正确的 (实际上就算不正确,作为 SwiftUI 这个框架的使用者来说,我们能做的事情其实有限)。...TCA 中 Reducer 上有一个非常方便的 debug() 方法,它会为这个 Reducer 开启控制台的调试输出,打印出接收到的 Action 以及其中 State 的变化。...Store 和 ViewStore 切分 Store 避免不必要的 view 更新 在这个简单的例子中,有一个很重要的部分,决定放到本文最后进行强调,那就是 Store 和 ViewStore 的设计...Single source of truth 状态驱动 UI 的最基本原则之一,由于这个要求,我们希望持有状态的角色只有一个。因此很常见的选择,整个 app 只有一个 Store。...在 SwiftUI 中,body 的刷新 SwiftUI 运行时通过 @ObservedObject 属性包装所提供的特性。现在这部分内容被包含在了 WithViewStore 中。

3.2K30

Swift 周报 第四十一期

直到今天,缺乏 @unknown default 情况仍然一个警告而不是错误;忽略该警告意味着如果遇到未来的枚举案例,则会发生运行时陷阱。...这个有限的修订与启用非扩展枚举的正交、增量工作无关,该工作适用于非弹性库。 讨论列出类型的存储属性[5] 心愿已久的一项功能能够将类型的存储属性与计算属性分开进行分类。...目前,通过生成的文档很难整理出所有实例属性,以了解类型的实际表示是什么。 今天对这个想法进行了一些调查,发现 lib/SymbolGraphGen 目前将所有实例属性都分类为存储属性(vp 2)。...在使用了相对新但规模较小的 Verse 编程语言几个月后,开始喜欢能够在 if 语句的条件列表中创建中间常量和变量,以及执行常规函数的能力。 开始思考为什么 Swift 没有这样相当方便的功能。...与 Verse 不同,Swift 不将抛出错误视为条件。这是可以接受的,并不打算改变这一点。 以下希望在 Swift 中被允许的示例。

21440

Ask Apple 2022 中与 Core Data 有关的问答

SwiftUI 中,我们通常会使用 environment 为视图树注入视图上下文,一旦 loadPersistentStores 出现错误导致 container 无法正常创建,那么调用上下文的注入将会失败...共享数据出现错误Q:的问题关于 Core Data with CloudKit 的。...给出的示例删除所有超过 7 天的事务。但是,为什么 7 天?为什么不是 14 天?非常希望一个可靠而具体的示例,说明如何安全地清除历史数据以防止磁盘空间浪费。A:清除历史记录由客户决定的。...例如,如果写 CAST(now(), 'NSNumber') 意图在当前时间做数学运算,我会收到 “Don't know how to cast to NSNumber” 的错误。...想获取在这组标签 ID 中至少有一个标签的所有视频。如何创建一个 NSPredicate 来表示这个?A:或许可以尝试一下 ANY tag.name IN %@。%@ 对应的标签数组。

2.8K20

使用 SwiftUI 创建一个灵活的选择器

前言 最近,在正在开发一个在 Dribbble 上找到的设计的 SwiftUI 实现时,想到了一个点子,可以通过一些酷炫的筛选器扩展该项目以缩小结果列表。...让我们来看看使用 SwiftUI 创建灵活选择器的实现! 可选择协议 选择器的最重要部分,我们可以通过该视图组件选择一些所需的选项。因此,首先创建了一个 Selectable 协议。...这就是为什么引入了一个 FontWeight 枚举,其中包含以 UIFont 权重命名的所有可能情况。...此外,该枚举有两个属性一个返回 UIFont 权重,另一个返回 SwiftUI Font 权重。通过这种方式,我们只需向 FlexiblePicker 提供 FontWeight 枚举的特定情况。...最后,提供了一个简单的视图实现,可以在 SwiftUI 中使用该选择器。这个选择器可用于创建各种交互式选择界面。 - EOF -

25620

为自定义属性包装类型添加类 @Published 的能力

通过 @Published 标记的属性在发生改变时,其订阅者(通过 $ 或 projectedValue 提供的 Publisher )将收到即将改变的值。...这一特性,也让 @Published 成为 SwiftUI 中最有用的属性包装器之一。...但为一个语言添加、修改、删除某项功能事实上一个比较漫长的过程,期间需要对提案不断地进行讨论和修改。proposal 将该过程汇总成文档供每一个开发者来阅读、分析。...上面的代码也解释了为什么在使用了属性包装器后,无法再声明相同名称(前面加下划线)的变量。 // 在使用了属性包装器后,无法再声明相同名称(前面加下划线)的变量。...在撰写 在 SwiftUI 下使用 NSUbiquitousKeyValueStore 同步数据[9] 一文的时候,尚未掌握本文介绍的方法。

3.2K20

深度解读 Observation —— SwiftUI 性能提升的新途径

KVO 仅限于 NSObject 子类使用,Combine 无法提供属性级别的精确观察,而且两者都无法实现跨平台支持。...为什么同样出现在 apply 闭包中的可观察属性,修改后并不会触发回调( 测试二 )? withObservationTracking 创建的观察行为一次性的还是持久性的?...将其梳理如下: 创建观察阶段: withObservationTracking 在当前线程的 _ThreadLocal.value 中创建一个 _AccessList 执行 apply 闭包 可观察对象的可观察属性在...@PublishedObject 属性包装器来解决这个问题。...由于 Observation 框架仍然一个新事物,其 API 也还在不断演化中。随着越来越多的 SwiftUI 应用转换到这个框架上,开发者会总结出更多的使用心得。

51320

如何结合 Core Data 和 SwiftUI

SwiftUI一个解决方案,而且——您猜对了——这是另一个属性包装器。这次将其称为@FetchRequest,它带有两个参数:我们要查询的实体以及我们希望结果如何排序。...为了解决这个问题,我们将在列表下方创建一个按钮,每次点击都会添加一个新的随机学生,但是首先我们需要一个属性来存储托管对象上下文。 让重申一下,因为这很重要。...我们无法在代码中看到该类,因为它是在构建项目时自动生成的,就像 Core ML 的模型一样。...更好的,它已经将其添加到 SwiftUI 环境中,这就是@FetchRequest属性包装器起作用的原因——它使用了环境中可用的任何托管对象上下文。...这是一个引发函数的调用,因为理论上它可能会失败。实际上,我们所做的一切都没有失败的可能,因此我们可以使用try?来调用它——–我们不在乎捕获错误。 因此,请将最后一行添加到按钮的操作中: try?

11.8K30

掌握 SwiftUI 的 task 修饰器

Hide Timer 按钮后,app 出现了无法响应且控制台仍在持续输出( 不按照原定的间隔时间 )的情况,为什么会出现这样的问题呢?...app 无法响应是由于当前 task 在主线程上运行的,如果按照下文中的方法将 task 运行在后台线程之中,那么 app 将可以继续响应,但会在不显示日期文字的情况下,继续更新 date 变量,并且会在控制台持续输出...Swift 采用的协作式任务取消机制,也就是说,SwiftUI 无法直接停止掉我们通过 task 修饰器创建的异步任务的。...因为 SwiftUI 会将视图类型的实例默认推断为标注了 @MainActor ,并限定运行于主线程( 不仅仅是 body 属性 )。...作为一个事件源类型的 Source of Truth,每当接收到一个新的消息时,它都会导致 SwiftUI 对视图的 body 重新求值。

2.2K30

掌握 SwiftUI 的 task 修饰器

图片 我们的本意通过按钮来开启和关闭计时器的显示以控制任务的生命周期( 关闭时结束任务 ),但在点击 Hide Timer 按钮后,app 出现了无法响应且控制台仍在持续输出( 不按照原定的间隔时间...app 无法响应是由于当前 task 在主线程上运行的,如果按照下文中的方法将 task 运行在后台线程之中,那么 app 将可以继续响应,但会在不显示日期文字的情况下,继续更新 date 变量,并且会在控制台持续输出...Swift 采用的协作式任务取消机制,也就是说,SwiftUI 无法直接停止掉我们通过 task 修饰器创建的异步任务的。...因为 SwiftUI 会将视图类型的实例默认推断为标注了 @MainActor ,并限定运行于主线程( 不仅仅是 body 属性 )。...作为一个事件源类型的 Source of Truth,每当接收到一个新的消息时,它都会导致 SwiftUI 对视图的 body 重新求值。

3.5K60

解析SwiftUI布局细节(一)

,这篇准备在写UI的时候从SwiftUI角度我们具体的应该怎样去做,或者说是用SwiftUI我们该从什么角度去解析一个页面。...我们从一个具体的实际页面开始梳理一下用SwiftUI实际写UI的时候一些基本的知识,就如我们Demo中的的页面举例: ?...H(heng) 剩下的V就是纵向的,所有的iOS方向属性几乎都是这样,加深记忆的一个方式而已,但能保证你以后绝不会再搞混淆!...那我们就明白了,它的作用感觉类似初始化的样子,要没有它就显然不行的。 还有上面我们调用的时候为什么要写成列的形式,能不能写成"1" "2" "3" "4" 这种形式呢?...,这点需要我们注意,不要到时候写的超过十个了然后一头雾水不知道错误

2.3K10

SwiftUI 布局协议 - Part 1

由于涉及到许多内容,将分成两个部分: Part 1 - 基础: 什么布局协议 视图层次结构的族动态 我们的第一个布局实现 容器对齐 自定义值:LayoutValueKey 默认间距 布局属性和 Spacer...将它放在第二部分结尾有原因的,这个工具使用本文的知识构建的。不过,你可以直接复制代码使用它。 什么布局协议 采用布局协议类型的任务,告诉 SwiftUI 如何放置一组视图,需要多少空间。...这个框架使用了漂亮的 Swift 语言技巧使你的布局代码在向 SwiftUI 中插入时产生一个透明视图 。将在后面-高明的伪装者部分说明。..., 这个方法将会收到建议尺寸,一个子视图代理的合集和一个缓存。...那么我们为什么一直在 ViewBuilder中使用布局容器,就好像它们视图一样?事实证明,当你用代码放置你的布局时,会有一个系统函数调用来产生视图。那这个函数叫什么呢?

3.3K10

用AsyncAwait重建SwiftU的Redux-like状态容器

经过两年多的时间,SwiftUI发展到当前的3.0版本,无论SwiftUI的功能还是Swift语言本身在这段时间里都有了巨大的提升。时候使用Async/Await来重构的的状态容器代码了。...SwiftUI的状态容器 从王巍的SwiftUI与Combine编程[1]一书中,第一次接触到Single souce of truth式的编程思想。...•State(值类型)被保存在一个Store对象当中,为了在视图中注入方便,Store需符合ObservableObject协议,且为State设置@Published属性包装,保证State的任何变化都将被及时响应...1.0版本 在编写健康笔记1.0[2]时,采用了SwiftUI与Combine编程[3]一书中提出的解决方式。 对于副作用采用从Reducer中返回Command的方式来处理。...幸好,Combine很好的完成了这个本来并非它最擅长(管理生命周期,线程调度)的工作。

1.8K20

StateObject 与 ObservedObject

StateObject SwiftUI 2.0 中才添加的属性包装器,它的出现解决了在某些情况下使用 ObservedObject 视图会出现超预期的问题。...ObservedObject 和 StateObject 两者都保存了视图与可观察对象的订阅关系,在视图存续期内,它们都不会主动取消这个订阅,但 ObservedObject 无法确保可观察对象是否会由于被销毁而提前取消订阅...描述、实例与视图SwiftUI 一个声明式的框架,开发者用代码来声明( 描述 )想要的 UI 呈现。...( 例如依赖注入 )对该实例的 body 属性求值渲染视图从 SwiftUI 的角度来说,视图对应着屏幕上某个区域的一段数据,它是通过调用某个根据描述该区域的声明所创建的实例的 body 属性计算而来...由于实例会反复创建的,因此,开发者必须用特定的标识( @State、@StateObject 等 )告诉 SwiftUI ,某些状态与视图存续期绑定的,在存续期期间唯一的。

2.4K20
领券