Swinjectプロジェクトのresolveメソッドに引数を渡そうとしているテストプロジェクトがあります。Swinjectを使用する場合、resolveメソッドに引数を渡すにはどうすればよいですか?
私のSwinjectストーリーボードエクステンションファイルには、その例があります。
私はGetMessageAction@IBOutlet weak var myText: UILabel!
var dm:MainDM!
var container:Container!
override func viewDidLoad() {
super.viewDidLoad()
NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(3), target: self, selector: #selector(ViewController.getMessage), userInfo: nil, repeats: false)
}
func getMessage() {
let action:GetMessageAction? = container.resolve(GetMessageAction.self, argument: self)!
action?.execute()
}
を解決するには、次のやろうとしている私のViewControllerで
import Swinject
extension SwinjectStoryboard {
class func setup() {
let mainDm = MainDM()
defaultContainer.register(MainDM.self) { _ in
mainDm
}
defaultContainer.registerForStoryboard(ViewController.self) { r, c in
c.dm = r.resolve(MainDM.self)
c.container = defaultContainer
}
defaultContainer.register(GetMessageAction.self) { _, delegate in
GetMessageAction(dm:mainDm, delegate: delegate)
}
}
}
私のgetMessage関数が
fatal error: unexpectedly found nil while unwrapping an Optional value
これは解決策(GetMessageAction.self、引数:自己)に引数を渡せない理由を説明していません – mattwallace
私の誤解をおかけして申し訳ありません。あなたの質問を慎重に読む時間がなかった。 –
'InstantContentControllerWithIdentifier'や' instantiateInitialViewController'ではなく、 'ViewController'をイニシャライザでインスタンス化したと思います。そのため、 'ViewController'の' container'プロパティが注入されず、エラーが発生しました。 'instantiate *'メソッドのどちらかを使用する場合、 'container'プロパティが注入されていて' nil'ではないので、 'GetMessageAction'の' resolve'メソッドが引数で動作するはずです。 –