使用回调从Swift服务类延迟输出



嗨,我正在学习swift

我有以下未编译的代码块

class UserService {
    func name(delay: Int, completion: ([User]) -> Void) {
        var users = [User]()

        users.append(User(name: "User 1", email:"user1@gmail.com", age: 25))
        users.append(User(name: "User 2", email: "user2@gmail.com", age: 26))
        users.append(User(name: "User 3", email: "user3@gmail.com", age: 27))
        DispatchQueue.main.asyncAfter(deadline: delay, execute: completion(users))
    }
}

我想延迟一定的输出,此语法是新的,我想知道如何在特定时间后调用此回调。这个结果我想在Mainthread上交付。

在Swift 3中,这很容易:

let seconds = 10
DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {
    // Some work
}

在您的情况下是:

class UserService {
    func name(delay: DispatchTime, completion: @escaping ([User]) -> Void) {
        var users = [User]()

        users.append(User(name: "User 1", email:"user1@gmail.com", age: 25))
        users.append(User(name: "User 2", email: "user2@gmail.com", age: 26))
        users.append(User(name: "User 3", email: "user3@gmail.com", age: 27))
        DispatchQueue.main.asyncAfter(deadline: delay) {
            completion(users)
        }
    }
}
// Test it
let service = UserService()
let delay: DispatchTime = .now() + 10
service.name(delay: delay) { users in
    print(users)
}

最新更新