gpt4 book ai didi

ios - 如何使用台风快速注入(inject)委托(delegate)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:28 26 4
gpt4 key购买 nike

我试图使用台风在我的 View Controller 中注入(inject)“worker”类型。我的“ worker ”需要一个委托(delegate),以便在工作完成后调用此方法。我需要将我的 View Controller 设置为注入(inject)的工作类的委托(delegate)。换句话说,循环依赖。

更新问题来源:

//my typhoon assembly class
import Typhoon
class Assembly : TyphoonAssembly {

public dynamic func viewController() -> AnyObject {
return TyphoonDefinition.withClass(ViewController.self) {
(definition) in

definition.injectProperty("worker", with: self.foo())
definition.scope = TyphoonScope.Singleton
}
}


public dynamic func foo() -> AnyObject {
return TyphoonDefinition.withClass(Foo.self) {
(definition) in

definition.injectProperty("delegate", with: self.viewController())
}
}

}

Foo 是完成工作的地方,它实现了 WorkHandler 协议(protocol)并且有一个 SomeProtocol 类型的委托(delegate)在工作完成时调用:

import Foundation

@objc
protocol SomeProtocol: class {
optional func hasFinishedWork(value: Bool)
}

protocol WorkHandler : class {
func doSomething()
}



class Foo: WorkHandler{

//how will this get set?
var delegate:SomeProtocol?

func doSomething(){
print("doing the work")
delegate?.hasFinishedWork!(true)
}
}

我的 ViewController 像这样符合 SomeProtocol:

import UIKit

class ViewController: UIViewController, SomeProtocol{

var worker:WorkHandler?

override func viewDidLoad() {
super.viewDidLoad()

worker?.doSomething();
}

@objc func hasFinishedWork(value: Bool){
print("The work was all done")
}
}

上面的代码在运行时出现如下错误:

2016-02-29 20:25:43.250 TestApp[30604:5316415] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“需要 NSProxy 或 NSObject 的子类。”

有人能帮忙吗?

最佳答案

原来我必须让我的协议(protocol)继承自 NSObject:

@objc
protocol SomeProtocol: class {
optional func hasFinishedWork(value: Bool)
}

@objc
protocol WorkHandler : class {
func doSomething()
}




class Foo: NSObject, WorkHandler{

//how will this get set?
var delegate:SomeProtocol?

@objc func doSomething(){
print("doing the work")
delegate?.hasFinishedWork!(true)
}
}

现在它按预期工作了。

关于ios - 如何使用台风快速注入(inject)委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677957/

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