gpt4 book ai didi

ios - Swift 中的对象间父/子通信

转载 作者:搜寻专家 更新时间:2023-11-01 06:06:05 24 4
gpt4 key购买 nike

我有一个 View Controller ,其中包含一些需要相互通信的相关类的实例(对象)。

我可以通过在 VC 中创建对象的实例来轻松地设置它们:

var house = House ()
var road = Road ()
var town = Town ()

但是我如何在 House 对象中获得一个方法来“说话”/向 Road 对象发送数据?在某些语言中,我可以调用父对象并以其他类及其方法为目标:

func sendHouseData (num: Int) {
_parent.road.getHouseData (num)
}

显然 _parent 关键字不是 swift 代码,所以不会起作用。

我能想到的唯一方法是在 House 对象内创建一个 road 实例作为子对象,从而直接在范围内将其暴露给方法代码。在 VC 中使用大量外部代码来完成所有繁重的工作是另一种想法,这种想法似乎是糟糕的做法并且不够优雅。

有什么想法吗?

非常感谢。千瓦

最佳答案

一种方法是使用委托(delegate)模式。每个类都应该声明一个协议(protocol),其中包含它可以发送的所有消息,需要收听这些消息的类应该实现该协议(protocol),注册为(或其中之一)委托(delegate)并做出相应的响应。

这是一个如何实现 Delegation Pattern 的好例子.

以及您的对象的示例实现:

protocol HouseDelegate {
func readData(data:Int)
}

class House {
var delegate:HouseDelegate
var data:Int = 0

init(delegate:HouseDelegate) {
self.delegate = delegate
}

func sendData() {
self.delegate.readData(data)
}
}

class Road: HouseDelegate {

var data:Int = 0
func readData(data: Int) {
print("Read data \(data)")
self.data = data
}
}

var road = Road ()

var house = House (delegate: road)

house.sendData() //prints "Read data 0"

关于ios - Swift 中的对象间父/子通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37050530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com