Ios 这是在Swift中使用回调的正确方法吗?
在进行iOS开发时,我总是使用委托模式在类之间传递数据。最近我读到,回调往往是比授权更好的选择。我只是想知道我是否做得很好。下面是我的代码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
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
只知道它将收到“某种形状的东西”,这就是它所需要知道的!