Используя тайфун, я пытаюсь внедрить тип «рабочего» в свой контроллер представления. мой «Рабочий» требует делегата, чтобы, когда работа выполнена, он вызывал этот метод. Мне нужно настроить мой контроллер представления как делегат рабочего класса, который был введен. другими словами, круговая зависимость.
Обновленный вопрос с источником:
//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
и имеет делегат типа SomeProtocol
для вызова после завершения работы:
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] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Subclass of NSProxy or NSObject is required.'
Кто-нибудь может помочь с этим?
foo()
, который должен возвращать экземплярFoo
. Вот где вы быinjectProperty(@selector(delegate), with:self.appSettingsController)
. - person Slipp D. Thompson   schedule 28.02.2016