Ios 这是在Swift中使用回调的正确方法吗?

Ios 这是在Swift中使用回调的正确方法吗?,ios,swift,callback,Ios,Swift,Callback,在进行iOS开发时,我总是使用委托模式在类之间传递数据。最近我读到,回调往往是比授权更好的选择。我只是想知道我是否做得很好。下面是我的代码 class ViewControlleer: UIViewController { let NS = NetworkServices() let someNum = 10 func getData(){ NS.mainFunc(someNum, callback: { (newNum) -> Void in

在进行iOS开发时,我总是使用委托模式在类之间传递数据。最近我读到,回调往往是比授权更好的选择。我只是想知道我是否做得很好。下面是我的代码

class ViewControlleer: UIViewController {

let NS = NetworkServices()
let someNum = 10

  func getData(){
        NS.mainFunc(someNum, callback: { (newNum) -> Void in
            let newNumber = newNum*50
            print(newNumber)
        })
    }
}

class NetworkServices {


  func mainFunc(num: Int, callback: (Int)-> Void){
      let newNum = num*3
      callback(newNum)
  }


}
在我的代码中使用这种模式是一种很好的做法吗?“ViewController类知道
NetworkServices
类,但反之则不正确”这样说是否正确


谢谢

是的,你的理论很正确!回调是一种很好的开始方式,它依赖于抽象(类型签名),而不是具体化(实现功能的类)。以下是一些清理Swift符号的方法:

尾部闭包–Swift将根据参数类型推断回调类型,因此以下内容等效:

func getData(){
    NS.mainFunc(someNum) { newNum in
        let newNumber = newNum*50
        print(newNumber)
    }
}
方法作为函数–此表单可以让您更清楚地命名事物:

func getData(){
    NS.mainFunc(someNum, callback: myPrint)
}

func myPrint(newNum: Int) {
    let newNumber = newNum*50
    print(newNumber)
}

请你进一步解释一下你所说的“依赖抽象而不是具体的开始的好方法”是什么意思?谢谢!下面是一个依赖具体化的快速示例:
func mainFunc(num:Int,vc:ViewController){vc.myPrint(num*3)}
。此代码在功能上等同于您在Q中发布的代码。但是现在,
NetworkServices
需要了解
ViewController
才能完成其工作!然而,在您的版本中,我们使用类型签名作为抽象(协议也可以工作,但在这里是多余的)。现在
NetworkServices
只知道它将收到“某种形状的东西”,这就是它所需要知道的!