jamiechoo

 

利用swift protocol 实现把数据传递给swiftui页面

通过协议传递数字数据并更新 SwiftUI 页面上的计数

在这个示例中,我们将通过协议传递一个数字,并让 SwiftUI 页面显示该数字。

1. 定义协议

protocol CountUpdateDelegate: AnyObject {
  func didUpdateCount(_ count: Int)
  }

2. 创建一个类并传递数字数据

class Counter: ObservableObject {
  weak var delegate: CountUpdateDelegate?
  private var count = 0
  func incrementCount() {
  count += 1 // 通过代理传递新的计数值
  delegate?.didUpdateCount(count)
   }
}

3. 在 SwiftUI 页面中实现协议并更新视图

import SwiftUI
 
struct CounterView: View, CountUpdateDelegate {
   @State private var displayedCount = 0
   private var counter = Counter()
   var body: some View {
      VStack(spacing: 20) {
        Text("Count: \(displayedCount)")
        .font(.title)
       Button("Increment Count") {
       // 设置代理并调用方法增加计数
       counter.delegate = self counter.incrementCount()
       }
    } .padding()
  }
 // 实现协议方法以更新页面显示的计数
func didUpdateCount(_ count: Int) {
   displayedCount = count
    }
  }

解释

  • CountUpdateDelegate 协议声明了一个 didUpdateCount 方法,用于传递整数数据。
  • Counter 类具有一个代理属性 delegate,每次计数增加时,通过 delegate?.didUpdateCount(count) 将更新的计数传递给代理。
  • CounterView 遵循 CountUpdateDelegate,在 didUpdateCount 方法中更新 displayedCount,从而刷新页面上的计数显示。

posted on 2024-11-12 20:30  jamiechoo  阅读(23)  评论(0)    收藏  举报

导航