iOS 开发 swift 如何写一个block用于页面a给页面b传三个参数m,n,p,并页面b会给页面a反馈两个参数r,t

64 阅读2分钟

在iOS开发中,使用Swift编写Block(闭包)来实现页面A向页面B传递参数m, n, p,并且页面B向页面A反馈参数r, t,可以通过以下步骤实现:

1. 定义闭包类型

首先,在页面B中定义一个闭包类型,该闭包接受两个参数r和t,并且没有返回值。

// 在页面B的ViewController中定义闭包类型

typealias FeedbackBlock = (r: Int, t: String) -> Void

2. 声明闭包属性

在页面B的ViewController中声明一个闭包属性,用于存储从页面A传递过来的闭包。

// 在页面B的ViewController中声明闭包属性

var feedbackBlock: FeedbackBlock?

3. 定义方法接收闭包

在页面B的ViewController中定义一个方法,用于接收页面A传递过来的闭包。

// 在页面B的ViewController中定义方法接收闭包

func setFeedbackBlock(_ block: @escaping FeedbackBlock) {

feedbackBlock = block

}

4. 页面A传递参数并设置闭包

在页面A中,创建页面B的实例,并传递参数m, n, p给页面B。同时,设置一个闭包,用于接收页面B反馈的参数r, t。

// 在页面A的ViewController中传递参数并设置闭包

let viewControllerB = ViewControllerB()

viewControllerB.setFeedbackBlock { (r, t) in

print("Received feedback from B: r = \(r), t = \(t)")

}

// 假设m, n, p是需要传递的参数

let m = 10

let n = 20

let p = "Hello"

// 这里可以将m, n, p传递给页面B,例如通过属性或方法

viewControllerB.m = m

viewControllerB.n = n

viewControllerB.p = p

// 导航到页面B

self.navigationController?.pushViewController(viewControllerB, animated: true)

5. 页面B处理参数并调用闭包

在页面B中,处理从页面A传递过来的参数m, n, p,并在适当的时候调用闭包,将反馈的参数r, t传递回页面A。

// 在页面B的ViewController中处理参数并调用闭包

func someMethodInViewControllerB() {

// 假设这里处理了m, n, p,并生成了反馈参数r, t

let r = 30

let t = "World"

// 调用闭包,传递反馈参数r, t

feedbackBlock?(r: r, t: t)

}

总结

通过上述步骤,我们实现了页面A向页面B传递参数m, n, p,并且页面B向页面A反馈参数r, t。关键在于定义闭包类型、声明闭包属性、定义方法接收闭包、传递参数并设置闭包、处理参数并调用闭包。这样可以灵活地在两个页面之间进行数据传递和反馈。