所以我有NSObject
类来控制我的代码中的某些内容,但是我想在NSObject
类中的UIViewController
类执行方法中完成某件事时使用,因此我在下面使用了两种方式,但没有一种他们对我不起作用
1-我使用了委托协议,因此在视图控制器类中,我将这些
protocol ImagePickerManagerDelegate : NSObjectProtocol {
func showAlert(_ type : Int)
}
class myViewController : UIViewController , ImagePickerManagerDelegate {
func showAlert(_ type : Int) {
print(type)
}
let imagePicker = ImagePickerManager()
override func viewDidLoad() {
super.viewDidLoad()
imagePicker.delegate = self
}
}
这是另一个类中的代码
class ImagePickerManager: NSObject {
weak var delegate : ImagePickerManagerDelegate?
func foo() {
self.delegate?.showAlert(1)
}
}
foo函数也将执行
self.delegate?.showAlert(1)
但什么也不会发生
2-我使用了CallBack函数,但不会再次发生
class ImagePickerManager: NSObject {
var ErrorCallback: ((Int) -> ())?
func ErrorAlert(_ callback: @escaping ((Int) -> ())) {
ErrorCallback = callback
}
func foo() {
self.ErrorCallback?(1)
}
}
这是CallBackFunction的UIViewController
代码
ImagePickerManager().ErrorAlert(self) { type in
print(type)
}
我需要以下方法之一来执行代码中的功能
答案 0 :(得分:0)
如果您只是想在NSObject类上发生某些事情时触发视图控制器类上的某些事情,则可以使用闭包。
您的VC类将拥有您的NSObject
类的实例,就像您之前所做的那样:
class MyViewController : UIViewController {
// Instance of your NSObject class
let imagePicker = ImagePickerManager()
override func viewDidLoad() {
super.viewDidLoad()
// You implement the closure in the VC
imagePicker.fooHandler = { integer in
print(integer)
}
// Once you've implemented the closure, when the Image Picker's doSomethingWithFoo() is called, it will trigger the closure.
imagePicker.doSomethingWithFoo(2)
}
}
您的NSObject
类将定义一个将在您的VC类中实现的闭包,以及一个将触发该闭包的方法:
class ImagePickerManager: NSObject {
var fooHandler: ((Int) -> Void)?
func doSomethingWithFoo(with integer: Int) {
fooHandler?(integer)
}
}
这只是如何布局的简化示例,但是您可以设置合适的方式和时间来调用闭包。