SwiftUI报错:无法将Binding<Bool>类型赋值给Bool类型求解决
解决SwiftUI中Binding初始化类型不匹配问题
你的错误根源很直接:@Binding var isFollowed: Bool声明的变量是Bool类型,但你试图赋值的$isFollowed是Binding
核心逻辑梳理
@Binding是用来共享父视图状态的属性包装器,它的实例不需要在当前视图内部手动创建,必须从父视图传入。
正确初始化写法
修改init方法,添加Binding<Bool>类型的参数,直接赋值给@Binding的底层存储变量(以下划线开头):
struct ProfileView: View { @ObservedObject var viewModel: ProfileViewModel @Binding var isFollowed: Bool init(user: User, isFollowed: Binding<Bool>) { self.viewModel = ProfileViewModel(user: user) self._isFollowed = isFollowed } // 视图body实现... }
在父视图中调用时,传入对应的Binding值即可:
// 父视图示例 @State private var isUserFollowed = false var body: some View { ProfileView(user: targetUser, isFollowed: $isUserFollowed) }
替代方案(状态由ViewModel管理)
如果isFollowed的状态本就应该由ProfileViewModel负责,可选择以下两种方式:
- 用
@State初始化本地状态
struct ProfileView: View { @ObservedObject var viewModel: ProfileViewModel @State private var isFollowed: Bool init(user: User) { self.viewModel = ProfileViewModel(user: user) self._isFollowed = State(initialValue: viewModel.user.isFollowed) } // 视图body实现... }
- ViewModel通过
@Published暴露状态
class ProfileViewModel: ObservableObject { @Published var isFollowed: Bool let user: User init(user: User) { self.user = user self.isFollowed = user.isFollowed } } struct ProfileView: View { @ObservedObject var viewModel: ProfileViewModel init(user: User) { self.viewModel = ProfileViewModel(user: user) } // 视图body中直接使用viewModel.isFollowed }
内容的提问来源于stack exchange,提问作者robowarrior
相关产品推荐
相关产品推荐

