如何在 Swift 中的框架内创建委托/回调? [复制]
Posted
技术标签:
【中文标题】如何在 Swift 中的框架内创建委托/回调? [复制]【英文标题】:How to create delegate/callback inside framework in Swift? [duplicate] 【发布时间】:2019-11-06 06:26:44 【问题描述】:我一直在实现登录框架以用于应用程序开发。我已经创建了登录框架功能,它工作正常。
现在我正在尝试回调从应用程序到框架的成功或失败的返回响应,以及从框架到应用程序。
这是我的框架代码:
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
【问题讨论】:
有什么问题,将完成块作为loginApiCall
函数的参数,并响应对应用程序的切换响应来执行它
【参考方案1】:
你可以使用回调来实现
//框架代码
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
【讨论】:
在success
的情况下不需要break
。 break
默认添加。
@SGDev 回调和委托有什么区别
它显示错误转义闭包捕获框架中的非转义参数“回调”
查看我更新的代码,添加@escaping关键字
如何将响应数据返回给示例应用【参考方案2】:
首先你必须定义完成处理程序,然后你可以在你的函数参数中使用它。我建议您检查完成以轻松实现。
typealias DownloadComplete = () -> ()
public func loginApiCall(用户名: String?, 密码: String?, 完成: @escaping DownloadComplete)) 让参数= [ “用户名”:用户名, “密码”:密码 ] 打印(参数)
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:
【讨论】:
以上是关于如何在 Swift 中的框架内创建委托/回调? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
swift 2:与objective-c相比,推送通知没有委托回调
没有在 NSObject 类 ios swift 中获取委托方法的回调
如何在同一框架内访问 Objective-C 中的内部 Swift 类?