SwiftUI入门 - 16. 请求后端接口、Just的基本使用

置顶

菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行

“不积跬步,无以至千里;不积小流,无以成江海”

继续

上文中我们讨论了 Popup 的封装,实现了一个 全局Toast 的功能。

关于 LoadingPrompt 以及 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 = ""
}

踩坑

运行一下,点击 添加 按钮,得到了控制台报错
在这里插入图片描述
这是因为 Apple 不允许请求 http 的接口,修改一下配置即可,操作步骤如下图

在这里插入图片描述
具体的 item内容 我已经添加到代码的注释中,再次运行,调试框中出现了期望的返回值
在这里插入图片描述

总结

  1. 网上冲浪的时候看到了很多关于SwiftUI的请求库和封装方法,但是都比较复杂。
  2. 初学阶段没必要花那么多时间精力去搞底层实现,能用为主,Just库我觉得就挺好。
  3. 如果在真实的项目中使用的话,肯定是要再经过一次封装的,包括返回的数据类型定义等一大堆。
  4. 后续的文章中也许会讨论Loading + Request + DataType + Api 的完整使用。

欢迎关注微信公众号【思跃喵】,一起探讨。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我码玄黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值