gpt4 book ai didi

swift - 使用两个类创建协议(protocol)

转载 作者:行者123 更新时间:2023-11-28 11:37:59 25 4
gpt4 key购买 nike

我有两个类,类似的东西

class FirstClass {

func returnInt() -> Int {
return (42)
}
}

class SecondClass {

func printInt(myInt: Int) {
print(myInt)
}
}

我想知道是否可以在调用 FirstClass 的函数“returnInt() -> Int”时创建协议(protocol),从而调用第二个类“printInt(Int)”的函数。

实际上,我正在研究来自不同类的数据包的序列化/反序列化。

我认为这是最好的方法,这就是为什么我需要你的帮助。

谢谢

最佳答案

闭包

我不知道您的确切用法,但一种方法是使用闭包而不是协议(protocol)。在第一个类中创建闭包变量,然后在返回值后调用它

class FirstClass {

var valueReturned: ((Int)->Void)?

func returnInt() -> Int {
let value = 42
valueReturned?(value)
return value
}
}

然后在你有两个类的两个实例的引用的地方首先设置 valueReturned 并在闭包内部说当这将被调用时,你想调用 printInt(myInt:) 第二个和作为参数从闭包传递值

firstClass.valueReturned = { value in // assign parameter of closure
self.secondClass.printInt(myInt: value)
// self.printInt(myInt: value)
}

委托(delegate)模式

无论如何,如果你想使用协议(protocol),你将需要委托(delegate)模式。

从声明协议(protocol)开始

protocol FirstClassDelegate: class {
func printInt(myInt: Int)
}

然后在第一个类中创建委托(delegate)变量,并在返回值后调用委托(delegate)方法

class FirstClass {

weak var delegate: FirstClassDelegate?

func returnInt() -> Int {
let value = 42
delegate?.printInt(myInt: value)
return value
}
}

现在将此委托(delegate)协议(protocol)实现到第二类,并将某些第一类实例的 delegate 属性设置为 self

class SecondClass {

var firstClass = FirstClass()

init() {
firstClass.delegate = self
}
}

extension SecondClass: FirstClassDelegate {
func printInt(myInt: Int) {
print(myInt)
}
}

关于swift - 使用两个类创建协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54537443/

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