- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图使用台风在我的 View Controller 中注入(inject)“worker”类型。我的“ worker ”需要一个委托(delegate),以便在工作完成后调用此方法。我需要将我的 View Controller 设置为注入(inject)的工作类的委托(delegate)。换句话说,循环依赖。
//my typhoon assembly class
import Typhoon
class Assembly : TyphoonAssembly {
public dynamic func viewController() -> AnyObject {
return TyphoonDefinition.withClass(ViewController.self) {
(definition) in
definition.injectProperty("worker", with: self.foo())
definition.scope = TyphoonScope.Singleton
}
}
public dynamic func foo() -> AnyObject {
return TyphoonDefinition.withClass(Foo.self) {
(definition) in
definition.injectProperty("delegate", with: self.viewController())
}
}
}
Foo
是完成工作的地方,它实现了 WorkHandler
协议(protocol)并且有一个 SomeProtocol
类型的委托(delegate)在工作完成时调用:
import Foundation
@objc
protocol SomeProtocol: class {
optional func hasFinishedWork(value: Bool)
}
protocol WorkHandler : class {
func doSomething()
}
class Foo: WorkHandler{
//how will this get set?
var delegate:SomeProtocol?
func doSomething(){
print("doing the work")
delegate?.hasFinishedWork!(true)
}
}
我的 ViewController 像这样符合 SomeProtocol:
import UIKit
class ViewController: UIViewController, SomeProtocol{
var worker:WorkHandler?
override func viewDidLoad() {
super.viewDidLoad()
worker?.doSomething();
}
@objc func hasFinishedWork(value: Bool){
print("The work was all done")
}
}
上面的代码在运行时出现如下错误:
2016-02-29 20:25:43.250 TestApp[30604:5316415] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“需要 NSProxy 或 NSObject 的子类。”
有人能帮忙吗?
最佳答案
原来我必须让我的协议(protocol)继承自 NSObject:
@objc
protocol SomeProtocol: class {
optional func hasFinishedWork(value: Bool)
}
@objc
protocol WorkHandler : class {
func doSomething()
}
class Foo: NSObject, WorkHandler{
//how will this get set?
var delegate:SomeProtocol?
@objc func doSomething(){
print("doing the work")
delegate?.hasFinishedWork!(true)
}
}
现在它按预期工作了。
关于ios - 如何使用台风快速注入(inject)委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677957/
我在我的应用程序中使用 Storyboard。当我第一次开始集成 Typhoon 时,我在 plist 中列出了程序集,如下所示: TyphoonInitialAssemblies Appl
我正在尝试通过 Typhoeus on Rails 连接到 WebService,并且响应给了我一个代码 0。 它告诉我发生了 ssl_connect_error。 Typhoeus 的文档说要阅读消
我对台风有疑问。我想使用 Storyboard集成,所以我在 plist 中设置了正确的 Storyboard名称,并为 Storyboard中的每个 View Controller 定义了“typh
是否可以即时激活额外的程序集? 例如,在 Info.plist 中,我有两个程序集:UIAssembly 和 ServicesComponents。 除此之外,我还有多个 Storyboard,每个
我正在尝试手动实例化 Initial viewControllers 并坚持下一步。 这是有效的: -(TyphoonStoryboard *)storyboard { return [Typ
我正在 plist 中配置初始程序集,用于实例化 Storyboard中的第一个 Controller 。 稍后在应用程序中,我将使用以下方法更改 Root View Controller : Ty
在我逐步引入 Typhoon 的遗留应用程序中,如果我想从一个本身不是从 Typhoon 实例化的类中实例化 Typhoon 的实例,我可以在我的 AppDelegate 中放置以下内容: [self
我在一个 swift 项目中使用台风,据我所知,我必须像这样在 TyphoonAssembly 中显式映射所有注入(inject): public dynamic func appDelegate(
我有一个在几个地方注入(inject)的 A 类。我想在任何地方注入(inject)相同的 A 实例 - 有点像 Singleton,但需要注入(inject)。 有没有可能用台风做到这一点 最佳答案
我试图弄清楚如何在创建单例时将运行时参数注入(inject)到单例中,然后从那时起记住这些参数。不过,我不确定运行时参数的接口(interface)是否可以支持这一点。比如说,我有一个需要 token
我已经检查了让程序集实现协议(protocol)并将程序集作为属性注入(inject)到需要实现该协议(protocol)的 View Controller 的想法。这在这里解释:https://gi
我有一个用 Swift 编写的第三方库。该库提供了一个类,其中包含一些类方法。使用 Typhoon,我想将该类注入(inject)到我的一个类中,以便在单元测试下,我可以注入(inject)一个提供假
我如何将 Typhoon 与系统隐式生成 View Controller 的 iOS Storyboard一起使用?我是否必须在 prepareForSegue 方法中做一些特殊的事情? 最佳答案 积
我正在使用 Typhoon 进行依赖注入(inject)。但我有一个问题。偶尔,我会遇到以下异常: Terminating app due to uncaught exception 'NSInval
我在 Typhoon 中定义了一个 ApplicationAssembly。 所以我想做的是说:“这个类 X 需要注入(inject)符合 Foo 协议(protocol)的东西。这是一个 RealF
我目前正在尝试使用 Typhoon 将依赖注入(inject)添加到我的应用程序中,该应用程序现在一半是 Swift,一半是遗留的 Objective-C。我正在尝试从我的程序集中的 Storyboa
我有一个 Storyboard,其中有一个 View 使用 socket 连接到他的 Controller 。在同一个 Controller 中,我想注入(inject)一个需要访问该 View 的对
当使用手工制作的容器/注入(inject)器负责创建和管理我图中对象的生命周期时,我使用以下模式(我在一篇关于 ObjC 中的 DIY DI 的文章中读到): 假设我们有一个 Root View Co
我在 Xcode(OS X、Swift、Storyboards)中有一个干净的 OS X 项目。 Info.plist 有如下配置 这是 MyAssembly.sift 中 View Controll
我是一名优秀的程序员,十分优秀!