UIViewRepresentable中通过@Binding绑定的值是可以双向绑定的

35 阅读1分钟

大家好,我的开源项目PakePlus可以将网页/Vue/React项目打包为桌面/手机应用并且小于5M只需几分钟,官网地址:pakeplus.com

一个最简单的demo如下:

//
//  ContentView.swift
//  LearnSwift2
//
//  Created by song on 2025/12/4.
//

import SwiftUI

struct ContentView: View {
    @State var name = "1024小神"

    var body: some View {
        VStack {
            Text(name)
            MyView(name: $name)
                .frame(width: 200, height: 200)
        }
        .padding()
        .onAppear {
            print("ContentView onAppear")
            Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: {
                _ in
                print("ContentView Timer fired")
                name += "*"
            })
        }
    }
}

struct MyView: UIViewRepresentable {
    @Binding var name: String

    func makeUIView(context: Context) -> some UIView {
        let view = UIView()
        view.backgroundColor = .red
        Timer.scheduledTimer(withTimeInterval: 2, repeats: true, block: {
            _ in
            print("Timer fired")
            name += "!"
        })
        return view
    }

    func updateUIView(_ uiView: UIViewType, context: Context) {
        print("updateUIView")
    }
}

#Preview {
    ContentView()
}

大家好,我是1024小神,技术群 / 私活群 / 股票群 或 交朋友 都可以私信我。 如果你觉得本文有用,一键三连 (点赞、评论、关注),就是对我最大的支持~