嗨,我正在学习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)
}