【问题标题】:swift 2.2 #selector on varswift 2.2 #selector on var
【发布时间】:2016-04-26 13:02:53
【问题描述】:

我使用 Typhoon,我需要注入属性的选择器

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

但编译器没有看到选择器定义为 var。

例如: 如果我有var viewModel: AuthViewModel!

使用#selector(viewModel)

所以我得到Argument of '#selector' cannot refer to a property

更新:

我遇到了在 Swift 中使用 Typhoon 的问题。我解决了我的问题,例如放弃 Typhoon 并切换到 Swinject。 现在我还可以使用 struct 进行注入等等。

【问题讨论】:

标签: swift swift2.2


【解决方案1】:

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

您可以将#selector() 用于:Understanding Swift 2.2 Selector Syntax - #selector() 的概述

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

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

- 引用自 @selector() in Swift?

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

【讨论】:

  • 来自 NSObject 的 AuthViewModel 子类和使用的 viewModel 类也是 UIViewController 的子类。我能做些什么?如果我使用 Selector("viewModel") 它可以工作,但我有警告。但我不能使用 #selector 因为 viewModel 是“var”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2014-08-05
  • 2015-10-30
  • 2018-02-14
  • 2014-09-13
  • 1970-01-01
相关资源
最近更新 更多