我有3个班:
Core
不会从任何类继承。{
vcMain
和vcIncomingFile
都继承自UIViewController
。
我有vcMain
到vcIncomingFile
的segue。
如何在-performSegueWithIdentifier:
和vcMain
之间调用Core类中的vcIncoming
方法。我的意思是我希望在Core类中有一个方法或委托或其他任何可以执行从vcMain
到vcIncomingFile
的搜索。
class Core {
func showIncomingVC(){ }
}
在showIncomingVC
函数中,我希望在performSegue
和vcMain
之间vcIncomingFile
。
感谢
答案 0 :(得分:0)
Core
必须是UIViewController
或某些继承UIViewController
的类,因为performSegueWithIdentifier
是UIViewController的函数
您可以使用协议。使用func showIncomingVC(){}在Core类中创建一个协议,并在视图类中使用它的委托
答案 1 :(得分:0)
就这样做:
struct Segue {
let sourceVC: UIViewController
let sender: AnyObject
let identifier: String
}
protocol SegueProtocol: class {
var segue: Segue { get }
}
class Core {
weak var delegate: SegueProtocol?
func perform() {
guard let segue = delegate?.segue else {
return
}
segue.sourceVC.performSegueWithIdentifier(segue.identifier, sender: segue.sender)
}
}
答案 2 :(得分:0)
要正确实现模式,我们需要知道您的Core类是否是模型的一部分,或者它是否是某种控制流机制。
如果它是模型的一部分,它应该对视图控制器一无所知,但允许视图控制器访问它。在这种情况下,您的视图控制器可以实现某种类型的委托协议,并通过将自己指定为Core功能的某些部分的委托来建立来自Core类的调用路径。然后,Core可以通过调用协议中定义的方法在其委托中触发任何预定义的行为。
例如,
如果使用名为fileReceived()的方法定义名为FileEventDelegate的协议。
然后,在FileEventDelegate类型的名为fileEventDelegate的Core类中添加一个成员?
每当Core类收到一个文件时,它都可以调用fileEventDelegate?.fileReceived()。对象实例,无论哪个类实现协议,都将自己注册为委托,将从那里处理它 单元测试类也可以是代表,甚至不需要执行segue 您的Core类甚至可以在没有设置委托的情况下工作。
在UI方面,您的VcMain类可以通过定义调用performSegueWithIdentifier(...)的fileReceived()函数来实现FileEventDelegate协议。在viewLoaded()上,它可以将自己设置为它正在使用的Core类实例的fileEventDelegate。
这将使viewController中的所有模型到视觉逻辑保持原样。
如果您的Core类完全分离视图控制器(意味着视图控制器不知道如何访问Core的实例),您可能需要查看NSNotificationCenter并发送通知在Universe中为您的viewControllers异步提取。