Swift 闭包变量未捕获字符串

Swift 闭包变量未捕获字符串,swift,Swift,此代码不工作,如何修复它 我试图处理字符串并返回它,但没有结果。打印不会向控制台输出任何内容 class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let x = "hello" let viewm = viewmodel() viewm.handler(x)

此代码不工作,如何修复它

我试图处理
字符串并返回它,但没有结果。打印不会向控制台输出任何内容

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let x = "hello"
        let viewm = viewmodel()
        viewm.handler(x)
        viewm.handler = { item in
            print(item)
        }
        viewm.execute { (tt) in
            print(tt)
        }
    }
    class viewmodel {
     var handler:(String) -> Void = {
         (data: String) in
    
    }
    func execute(complete: @escaping (String) -> Void) {
        self.handler = complete
    }
}


现在还不清楚您想在这里实现什么,但是如果您的问题是
打印(项目)
没有打印任何内容,那么这是因为此代码本身不会打印任何内容:

viewm.handler = { item in
   print(item)
}
handler
属性是接收字符串参数并返回Void的闭包。在
viewDidLoad
方法中,您正在指定一个符合这些特征的闭包,除此之外,还将打印传递的参数

假设闭包是自包含的功能块,您需要调用它以执行其功能块;但是你需要在它被定义之后调用它;否则,它不会打印任何内容

如果您按照这个顺序编写代码,“hello”将被打印出来

viewm.handler = { item in
  print(item)
}
viewm.handler(x)

execute方法只保存完成处理程序,然后不做任何操作就返回。它既不做任何有用的工作,也从不调用完成处理程序。你想做什么?我想把数据从一个控制器传递到一个视图模型,然后再传递到另一个视图模型。但我不太明白如何做得更好@邓肯