如何在 Swift 中的框架内创建 delegate/callback?
How to create delegate/callback inside framework in Swift?
我一直在实施用于应用程序开发的登录框架。我已经创建了登录框架功能并且工作正常。
现在我正在尝试对 return 响应进行回调,以了解从应用程序到框架,从框架到应用程序是成功还是失败。
这是我的框架代码:
public func loginApiCall(username: String?, password: String?) {
let parameters = [
"username": username,
"password": password
]
print(parameters)
let url = "apiUrl/authentication/"
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
response in
switch (response.result) {
case .success:
print(response)
break
case .failure:
print(Error.self)
}
}
}
这是我使用 myframework 的示例应用程序:
override func viewDidLoad() {
super.viewDidLoad()
//framework called here...
let apiCall = APICall.init()
apiCall.loginApiCall(username: "demo", password: "demo")
}//viewdidload
你可以使用回调实现
//框架代码
public func loginApiCall(username: String?, password: String?, callback : @escaping ((Bool) -> Void)) {
let parameters = [
"username": username,
"password": password
]
print(parameters)
let url = "apiUrl/authentication/"
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
response in
switch (response.result) {
case .success:
callback(true)
case .failure:
callback(false)
}
}
}
// viewDidLoad代码
override func viewDidLoad() {
super.viewDidLoad()
//framework called here...
let apiCall = APICall.init()
apiCall.loginApiCall(username: "demo", password: "demo") { (status) in
print("code")
}
}
//注意:根据您的要求创建 completionHandler,它是一个演示 completionHandler
首先你必须定义完成处理程序,然后你可以在你的函数参数中使用它。我建议您查看完成情况以轻松实现。
typealias 下载完成 = () -> ()
public func loginApiCall(用户名: String?, 密码: String?, 完成: @escaping DownloadComplete))
{
让参数 = [
"username": 用户名,
"password": 密码
]
打印(参数)
let url = "apiUrl/authentication/"
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
response in
switch (response.result) {
case .success:
completed(). // important part
case .failure:
}
}
我一直在实施用于应用程序开发的登录框架。我已经创建了登录框架功能并且工作正常。
现在我正在尝试对 return 响应进行回调,以了解从应用程序到框架,从框架到应用程序是成功还是失败。
这是我的框架代码:
public func loginApiCall(username: String?, password: String?) {
let parameters = [
"username": username,
"password": password
]
print(parameters)
let url = "apiUrl/authentication/"
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
response in
switch (response.result) {
case .success:
print(response)
break
case .failure:
print(Error.self)
}
}
}
这是我使用 myframework 的示例应用程序:
override func viewDidLoad() {
super.viewDidLoad()
//framework called here...
let apiCall = APICall.init()
apiCall.loginApiCall(username: "demo", password: "demo")
}//viewdidload
你可以使用回调实现
//框架代码
public func loginApiCall(username: String?, password: String?, callback : @escaping ((Bool) -> Void)) {
let parameters = [
"username": username,
"password": password
]
print(parameters)
let url = "apiUrl/authentication/"
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
response in
switch (response.result) {
case .success:
callback(true)
case .failure:
callback(false)
}
}
}
// viewDidLoad代码
override func viewDidLoad() {
super.viewDidLoad()
//framework called here...
let apiCall = APICall.init()
apiCall.loginApiCall(username: "demo", password: "demo") { (status) in
print("code")
}
}
//注意:根据您的要求创建 completionHandler,它是一个演示 completionHandler
首先你必须定义完成处理程序,然后你可以在你的函数参数中使用它。我建议您查看完成情况以轻松实现。
typealias 下载完成 = () -> ()
public func loginApiCall(用户名: String?, 密码: String?, 完成: @escaping DownloadComplete)) { 让参数 = [ "username": 用户名, "password": 密码 ] 打印(参数)
let url = "apiUrl/authentication/"
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
response in
switch (response.result) {
case .success:
completed(). // important part
case .failure:
}
}