У меня есть тестовый проект, который я пытаюсь передать аргументу метода разрешения в проекте Swinject.Как передать аргументы методу разрешения при использовании Swinject?
Вот пример того, что у меня есть в файле расширения для раскадровки Swinject.
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)
}
}
}
в моем ViewController я пытаюсь сделать следующее, чтобы решить 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()
}
я получаю следующее сообщение, когда моя функция GetMessage работает
fatal error: unexpectedly found nil while unwrapping an Optional value
Это не объясняет, почему я не могу передать аргумент разрешению (GetMessageAction.self, аргумент: self) – mattwallace
Прошу прощения за мое недоразумение. У меня не было времени внимательно прочитать ваш вопрос. –
Я думаю, что вы инициализировали 'ViewController' своим инициализатором, а не' instantiateViewControllerWithIdentifier' или 'instantiateInitialViewController'. Вот почему свойство 'container'' ViewController' не было введено, и вы получили ошибку. Если вы используете какой-либо метод 'instantiate *', я думаю, что метод 'resolve' для' GetMessageAction' с аргументом должен работать, потому что свойство 'container' вводится, и это не' nil'. –