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 = ""
}

踩坑

运行一下,点击 添加 按钮,得到了控制台报错

1205-2.png

这是因为 Apple 不允许请求 http 的接口,修改一下配置即可,操作步骤如下图

1205-3.png

具体的 item内容 我已经添加到代码的注释中,再次运行,调试框中出现了期望的返回值

1205-4.png

总结

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容