1

I use Typhoon and I need selector for injection property

definition.injectProperty(Selector("viewModel"), with: self.viewModel.inviteViewModel())

but compiler don't see selector define as var.

for example: if I have var viewModel: AuthViewModel! and

use #selector(viewModel)

so I get Argument of '#selector' cannot refer to a property

UPDATE:

I have the problem from used Typhoon in Swift. I resolve my problem like renouncement from Typhoon and switch to Swinject. Also now I can use struct for injection and much more.

4

1 回答 1

1

您对可以传递的内容有误解#selector()。您绝对应该阅读 Eric D 发布的 StackOverflow 问题:

您可以使用#selector()的概述:了解 Swift 2.2 选择器语法 - #selector()

不能将 Swift 属性传递给的原因#selector()

选择器可用性:选择器引用的方法必须暴露给 ObjC 运行时。如果它位于(最终)从 NSObject 继承的类中,情况已经如此,但如果它位于纯 Swift 类中,则需要在该方法的声明前加上 @objc。请记住,私有符号也不会暴露给运行时——您的方法至少需要具有内部可见性。

- 从Swift 中的 @selector()引用?

简而言之,你不能传入 avar并且你需要传递一个 Objective-C 运行时知道的函数。它要么是一个 Objective-C 方法,要么是一个标记为@objc.

于 2016-04-05T11:04:54.250 回答