gpt4 book ai didi

ios - 从 swift 中的 NSObject 类执行 UIViewController 中的函数

转载 作者:行者123 更新时间:2023-11-29 05:48:33 27 4
gpt4 key购买 nike

所以我有 NSObject 类来控制代码中的某些内容,但我希望当在 NSObject 类中执行某些操作时执行 UIViewController 类中的方法所以我使用了下面两种方法,但没有一个对我不起作用

1-我使用了委托(delegate)协议(protocol),因此在 View Controller 类中,我将这些

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)
}

我需要其中一种方法来执行代码中的函数

最佳答案

如果您只是想在 NSObject 类上发生某些情况时触发 View Controller 类上的某些内容,则可以使用闭包。

您的 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)
}
}

这只是一个如何布局的简化示例,但您可以根据需要设置调用闭包的方式和时间。

关于ios - 从 swift 中的 NSObject 类执行 UIViewController 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55899040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com