Tasks笔记

62 阅读1分钟

Swift 使用闭包回调 (类似于OC的block)

swift
class DataManager {
    var update: (() -> Void)?
    
    func updateData() {
        // 从网络获取数据并更新...
        
        update?() // 如果有回调,则调用它
    }
}



B控制器调用使用

let dataManager = DataManager()

// 设置回调
dataManager.update = {
    print("Data updated!") 
}

// 更新并调用回调
dataManager.updateData()
// 打印"Data updated!"

// 没有回调
let dataManager2 = DataManager() 
dataManager2.updateData() // 不打印任何内容

update闭包接收参数

var update: ((ParamType) -> Void)?
然后可以这样设置和调用闭包:
update = { (str) in    print("Update called with \(str)")}

使用如下
swift
class DataManager {
    var update: ((String) -> Void)?  
    
    func updateData(to value: String) {
        // 使用value从网络更新数据...
        
        update?(value) 
    }
}

let dataManager = DataManager()
dataManager.update = { (newValue) in 
    print("Data updated to \(newValue)!") 
}

使用guard语句来确保从field中获取的text值不为空。如果text为空,则guard语句的else块会执行,方法会返回