gpt4 book ai didi

ios - 不能通过委托(delegate)从另一个类执行方法?

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

我正在使用 swift 5.1,不知道 swift 版本是否无法实现。

我在 swiftA.swift 和 SwiftB.swift 中创建了类,我想在 SwiftA.swift 中执行方法。

swiftA.swift:

class MySchoolA : CaculateADelegate {
func executeCaculate(_ MyClass,caculateTheNumber index:Int) -> Int {
return 80
}
}

在 swiftB.swift 中

protocol CaculateADelegate: AnyObject {
func executeCaculate(_ MyClass,caculateTheNumber index:Int) -> Int
}

class MyClassB {
weak var delegate:CaculateADelegate?
init(){
let num = delegate?.executeCaculate(self,0)
}
}

变量num一直是nil,哪里错了?

谢谢。

最佳答案

在 B 类的 init 中,委托(delegate)是 nil

 weak var delegate:CaculateADelegate?

如果你这样做

 let bC = MyClassB() // here it's nil
bC.delegate = self // here it has a value

--

因此,为了工作,您可以通过在 init

中发送委托(delegate)来执行此操作
class MySchoolA : CaculateADelegate {
func executeCaculate(_ ff:MyClassB,caculateTheNumber index:Int) -> Int {
return 80
}
}

protocol CaculateADelegate: AnyObject {
func executeCaculate(_ ff:MyClassB,caculateTheNumber index:Int) -> Int
}

class MyClassB {
weak var delegate:CaculateADelegate?
init(_ del:CaculateADelegate){
self.delegate = del
let num = delegate?.executeCaculate(self,caculateTheNumber: 0)
print(num)
}
}

测试这个

MyClassB(MySchoolA()) // will print 80

关于ios - 不能通过委托(delegate)从另一个类执行方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59264697/

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