我使用Typhoon,我需要用于注入属性的选择器
definition.injectProperty(Selector("viewModel"), with: self.viewModel.inviteViewModel())但是编译器没有将选择器定义为var。
例如:如果我有var viewModel: AuthViewModel!和
使用#selector(viewModel)
所以我得到了Argument of '#selector' cannot refer to a property
更新:
我有问题是因为斯威夫特的旧台风。我解决了我的问题,如放弃台风,并切换到Swinject。另外,现在我可以使用struct进行注入,等等。
发布于 2016-04-05 11:04:54
您对可以传递到#selector()中的内容有误解。您绝对应该阅读Eric发布的StackOverflow问题:
概述可以使用#selector()的内容:Understanding Swift 2.2 Selector Syntax - #selector()
不能将Swift属性传递给#selector()的原因
选择器可用性:选择器引用的方法必须公开给ObjC运行时。如果它位于(最终)从NSObject继承的类中,则已经是这种情况,但是如果它位于一个纯Swift类中,则需要用@objc作为该方法声明的前缀。请记住,私有符号也不会暴露在运行时中--您的方法至少需要内部可见性。
-引用自https://stackoverflow.com/questions/24007650/selector-in-swift/24007718#24007718
简而言之,您不能传入一个var,您需要传递一个目标-C运行时知道的函数。它要么是Objective方法,要么是标记为@objc的Swift方法。
https://stackoverflow.com/questions/36423498
复制相似问题