Ich möchte Typhoon (GitHub & WebSite) für Abhängigkeitsinjektion in meiner App verwenden. Ich benutze Swift Version 3 und Typhoon 3.6. Leider stürzt meine App ab, wenn ich versuche, ein Objekt zu initialisieren. Ich habe folgendes Protokoll:Typhoon Parameter Injektion mit Initializer Absturz App
Protokoll
import Foundation
@objc public protocol Client {
func method()
}
Protokoll Implementierung
import Foundation
public class ClientWhateverImpl : NSObject, Client{
let name : String
init(name: name) {
self.name = name
}
public func method(){
//make something
}
}
Assembly
import Foundation
import Typhoon
public class MyAssembly: TyphoonAssembly {
public dynamic func client() -> AnyObject {
return TyphoonDefinition.withClass(ClientWhateverImpl.self) {
(definition) in
definition!.useInitializer("initWithName:") {
(initializer) in
initializer!.injectParameter(with: "name")
}
} as AnyObject
}
}
Nennen Sie es irgendwo
let myAssembly : MyAssembly = MyAssembly()
myAssembly.activate()
let client = myAssembly.client()
Leider habe ich die folgende Fehlermeldung:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Method 'initWithName:' not found on 'MyApp.ClientWhateverImpl'. Did you include the required ':' characters to signify arguments?'
ich einige Beiträge auf Stackoverflow über diesen Fehler lesen, aber auf ihrer Seite sie vergessen, die objectice-c-Methode zu verwenden Syntax. Aber in meinem Fall verwende ich die objc-Methode "initWithName". Gibt es in swift 3 etwas anderes? Hat jemand das gleiche Problem?
hast du das Wiki sehen: https://github.com/appsquickly/Typhoon/wiki/Swift-Quick-Start – muescha
Ich glaube, Sie müssen bei 'ClientWhateverImpl' auch die' TyphoonAssembly' – muescha
Was Sie tun meinst du genau? Ich kann die "Knight" -Klasse in der Kurzanleitung nicht sehen. Ich habe mehr oder weniger den Code der swift-Beispiel-App verwendet, die nur in swift 3 geschrieben wurde. Kannst du vielleicht eine Antwort mit deinem Vorschlag schreiben, um Missverständnisse zu vermeiden. –