通过一个简单的例子向我解释 Swift 中的委托
Explain me delegation in Swift by a simple example
我最近在学习Swift。我创建了各种复杂的项目,但我仍然不理解委派的本质。在我的项目中,我试图以各种可能的方式避免它。
我观看了有关该主题的各种视频,阅读了文章,但我无法理解授权的本质。
现在我决定花一些时间来解决这个问题,并创建了一个简单的项目来解决这个问题,但我仍然无法理解。
我想在点击按钮时从 FirstViewController 传递文本到 SecondViewController ,但是这段代码不起作用,是什么原因?我做错了什么?
protocol Protocol {
func fillTheLabel(with text: String)
}
class FirstViewController: UIViewController {
var delegate: Protocol?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func buttonPressed(_ sender: Any) {
let text = "Some Text Here"
delegate?.fillTheLabel(with: text)
}
}
// 按钮和 SecondViewController 之间有一个赛格威
class SecondViewController: UIViewController, Protocol {
var firstVC: FirstViewController?
@IBOutlet var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
firstVC?.delegate = self
}
func fillTheLabel(with text: String) {
label.text = text
}
}
S0,如评论所述:
– 它不起作用,因为您的 VC1 在 VC2
中为 nil
– 让一个 VC 代表另一个
是不好的做法
简单的理论例子是:
您有 class DataParser 从互联网加载一些数据,进行解析,使数据被视为您的模型,将其保存到本地存储。这需要时间。在所有准备工作完成后,您的 VC 应该会显示此数据。
工作完成后class DataParser 应该通知 VC 它已完成数据并且VC欢迎展示
当然 VC 应该通过实施来“展示”他们的兴趣:
dataParser.delegate = self
Class 正在“寻找”对他的消息感兴趣的代表:
delegate?.dataIsReadyToBeShown(with: data)
委托(此处为VC)在
中获取数据
func dataIsReadyToBeShown(with data: AnyClass)
我最近在学习Swift。我创建了各种复杂的项目,但我仍然不理解委派的本质。在我的项目中,我试图以各种可能的方式避免它。 我观看了有关该主题的各种视频,阅读了文章,但我无法理解授权的本质。 现在我决定花一些时间来解决这个问题,并创建了一个简单的项目来解决这个问题,但我仍然无法理解。
我想在点击按钮时从 FirstViewController 传递文本到 SecondViewController ,但是这段代码不起作用,是什么原因?我做错了什么?
protocol Protocol {
func fillTheLabel(with text: String)
}
class FirstViewController: UIViewController {
var delegate: Protocol?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func buttonPressed(_ sender: Any) {
let text = "Some Text Here"
delegate?.fillTheLabel(with: text)
}
}
// 按钮和 SecondViewController 之间有一个赛格威
class SecondViewController: UIViewController, Protocol {
var firstVC: FirstViewController?
@IBOutlet var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
firstVC?.delegate = self
}
func fillTheLabel(with text: String) {
label.text = text
}
}
S0,如评论所述:
– 它不起作用,因为您的 VC1 在 VC2
中为 nil– 让一个 VC 代表另一个
是不好的做法简单的理论例子是:
您有 class DataParser 从互联网加载一些数据,进行解析,使数据被视为您的模型,将其保存到本地存储。这需要时间。在所有准备工作完成后,您的 VC 应该会显示此数据。
工作完成后class DataParser 应该通知 VC 它已完成数据并且VC欢迎展示
当然 VC 应该通过实施来“展示”他们的兴趣:
dataParser.delegate = self
Class 正在“寻找”对他的消息感兴趣的代表:
delegate?.dataIsReadyToBeShown(with: data)
委托(此处为VC)在
中获取数据func dataIsReadyToBeShown(with data: AnyClass)