置顶
菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行
“不积跬步,无以至千里;不积小流,无以成江海”
继续
上文中我们讨论了 Popup
的封装,实现了一个 全局Toast
的功能。
关于 Loading
和 Prompt
以及 Confirm
的封装后续再来讨论,也许我会去掉 popup
库自己来实现。
按照原定计划,本文我们将继续来讨论请求后端接口 Request
的基本使用。
// 本文没有动图演示,懂的都懂。。。
思考
所有的前端开发中,后端接口的请求都是避不开的坎,尤其是在实际的项目开发中(当然不排除有纯前端操作的项目)。
同时,一般你想要自己实现一个request库的话,都是很麻烦的,想必在 swift 这种强类型语言中,比 弱类型的 js 的封装麻烦得多。
所以第一想法, 就是引入一个库来使用,最好这个库的调用方式足够简单,与在 js 中的使用也足够相似
最终我找到了 Just
库
既然选定了库,那么接下来自然是安装、查看文档、使用、踩坑,一整套连招了
安装
修改 Podfile
文件 :
platform :ios, '13.0'
use_frameworks!
target 'helloworld' do
pod 'ExytePopupView'
pod 'Just' // 新增这一行
end
随后执行:
pod install
一切顺利
使用
既然是要请求后端接口,那么首先肯定得要有一个后端接口才行,如下:
// laravel 路由文件,当然你也可以随便用其他的语言搞一个,反正是测试
Route::get('/api/test',function(){
return json_encode(['code'=>200,'data'=>'success']);
});
接下来就是 Just
库的使用了
假定我们的每一个 todo
项在新增的时候都要请求一次后端接口:
修改 TodoView.swift
文件
// 省略大部分的东西
Button("添加"){
/// 所有的示例在这里
/// https://github.com/dduan/Just/blob/master/Docs/QuickStart.playground/Contents.swift
/// 请求http 需要设置项目中的 info 标签页 里面的App Transport Security Settings 的子集 Allow Arbitrary Loads 为yes
let r = Just.get(
"http://www.test.test/api/test",
params: ["test":1]
)
if r.ok {
// 请求成功的情况
// r.json 就可以直接拿到json的结果了,但是是个没有类型的数据
// 需要进行转换,之前已经有过 JSONDecoder 的使用案例
print("response-json:\(r.json!)")
// 接下来就是之前的JSONDecoder处理JSON数据了
}else{
// 请求错误的情况
print("fail-reason:\(r.reason)")
}
if r.error != nil {
print(r.reason)
}
// POST 请求
// let rp = Just.post(
// "http://www.test.test/api/test",
// data:["test":1]
// )
// if r.ok {
// print(r.json!)
// 接下来就是之前的JSONDecoder处理JSON数据了
// }
showToast(content: "添加成功")
todos.add(name: newItem)
newItem = ""
}
踩坑
运行一下,点击 添加
按钮,得到了控制台报错
![](https://img.haomeiwen.com/i1116723/17ef6822b43bfda5.png)
这是因为 Apple
不允许请求 http
的接口,修改一下配置即可,操作步骤如下图
![](https://img.haomeiwen.com/i1116723/bdf4d73d6b41113e.png)
具体的 item内容
我已经添加到代码的注释中,再次运行,调试框中出现了期望的返回值
![](https://img.haomeiwen.com/i1116723/7310191c488e426e.png)
总结
- 网上冲浪的时候看到了很多关于SwiftUI的请求库和封装方法,但是都比较复杂。
- 初学阶段没必要花那么多时间精力去搞底层实现,能用为主,Just库我觉得就挺好。
- 如果在真实的项目中使用的话,肯定是要再经过一次封装的,包括返回的数据类型定义等一大堆。
- 后续的文章中也许会讨论
Loading + Request + DataType + Api
的完整使用。
欢迎关注微信公众号【思跃喵】,一起探讨。
网友评论