Swift中@State变量selectedPhotoData初始化赋值失败问题
问题分析与解决方案
问题原因
@State是SwiftUI框架全权管理的属性包装器,其值的存储由SwiftUI控制,并非普通的实例属性。在init方法中直接通过self.selectedPhotoData赋值无效——此时SwiftUI还未完成对@State属性的初始化管理,你的赋值操作会被后续SwiftUI的初始化流程覆盖,重置为属性的初始默认值(即nil),因此出现打印结果不一致的情况。
解决办法
直接操作@State对应的底层存储变量(以下划线开头的变量),绕过包装器访问器设置初始值:
@State private var selectedPhotoData: Data? init(friendID: String, friendUsername: String, friendName: String, friendBio: String, friendSelectedPhotoData: Data?) { self.id = friendID self.username = friendUsername self.name = friendName self.bio = friendBio // 直接赋值给@State的底层存储变量 self._selectedPhotoData = State(initialValue: friendSelectedPhotoData) print(friendSelectedPhotoData) // 输出 Optional(394546 bytes) print(selectedPhotoData) // 现在会输出对应的数据值 }
补充说明
@State的设计逻辑是让SwiftUI拥有值的所有权,通过包装器访问器(不带下划线的变量)在init中赋值,不会被SwiftUI认可。而直接操作带下划线的底层变量,是符合SwiftUI初始化规则的正确方式,能确保初始值被正确设置并保留。
内容的提问来源于stack exchange,提问作者Student
相关产品推荐
相关产品推荐

