首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

封装一个 Swift-Style 网络模块

Swift 跟 OC 有着完全不同设计哲学,它鼓励你使用 protocol 而不是 super class,使用 enum 和 struct 而不是 class,它支持函数式特性、范型和类型推导,让你可以轻松封装异步过程...如果你还是用 OC 思维写着 Swift 代码,那可以说是一种极大资源浪费,你可能还会因为 Swift 弱鸡反射而对它感到不满,毕竟 Swift 在强类型和安全性方面下足了功夫,如果不使用 OC...讲到网络层就绕不开 AlamofireAlamofire 几乎是现在用 Swift 开发 iOS App 标配,它是个很棒库,几乎能满足所有网络方面的日常需求,但如果对它再封装一下的话,不仅使用起来更得心应手...用于参数是一个会抛出异常闭包情况,该闭包异常不会被捕获,会被再次抛出,所以可以直接使用 try,而不用 do-try-catch // U 可能为 Optional func...数组方法: /** Fetch JSON model - parameter api: API address - parameter method:

1.9K41
您找到你想要的搜索结果了吗?
是的
没有找到

Swift2网络操作和异常处理

相信写过Swift的人应该都知道Alamofire,它是AFNetworkingSwift版本,同一个作者写。...之前在项目中我也一直使用Alamofire,但是升级到Xcode7之后旧版Alamofire不能用了,最新版又只支持iOS8之后系统,而公司项目还得兼容iOS7,所以接下来不打算用它了。...我需求比较简单,只要能发送GET请求获取数据以及发送POST请求提交数据就好了,大致看了一下Alamofire源码又上网查了点资料之后,花了不到半天写了几个简单函数,项目又能正常跑起来了。...如果跟我有同样需求同学可以把HttpManager.swiftclone下来直接拖到项目里,建议配合SwiftyJSON(一个很好用第三方JSON解析库)使用,直接把Source文件夹里SwiftyJSON.swift...这个文件也一起拖到项目中好了,要用Cocoapods导入framework的话似乎只能支持iOS8之后系统了。

1.9K10

Swift 项目中涉及到 JSONDecoder,网络请求,泛型协议式编程一些记录和想法

感谢苹果使用 Swift 写了 Swift 核心功能,以后想要了解更多功能背后原理可以不用啃 C++ 了,一边学习原理还能一边学习苹果内部是如何使用 Swift ,所谓一举两得。...在 Swift 里就是 Alamofire GitHub - Alamofire/Alamofire: Elegant HTTP Networking in Swift 。...默认都按照 GET 方法请求,在实际项目中会用到其它比如 POST方法Alamofire 做法是这样: /// HTTP method definitions. /// /// See https...) Alamofire.request("https://httpbin.org/delete", method: .delete) 可以看出在 request 方法里有个可选参数,设置完会给 NSURLRequest...("https://httpbin.org/get") 就刚才提到请求参数来说,Alamofire 是定义了一个 ParameterEncoding 协议,协议里规定一个统一处理方法 func encode

6.6K20

iOS开发之Alamofire源码解析

当然AlamoFire是AFSwift版本了,其中虽然是使用Swift语言实现,但是实现思路AFNetWorking大同小异。...下方是对Core文件夹下各个文件功能简述: Alamofire.swift ---- 该文件中主要是给用户提供一些便利调用方法,用户可以直接调用该文件中便利方法使用Alamofire相关功能...ParameterEncoding.swift ---- 负责请求参数各种编码(URL、URLEncodedInURL、JSON、PropertyList等编码),并将编码后数据URLRequest...method参数表示请求方式(GET, POST, PUT等),URLString参数是请求地址,parameter就是请求参数了。encoding参数就是请求参数编码方式,此处默认是URL编码。...5.Request类中相关代理类 从第一部分中类图中我们能看出Request类相关代理类,TaskDelegate是所有代理类基类。

3K70

【翻译】JavaScript中5个值得被广泛使用数组方法

但是,由于ES5糟糕浏览器支持率,这些方法并未被开发者广泛使用。...但是前端技术发展到今天,如果你时常关注Github上一些流行开源JS项目,你会发现这样一种趋势:开发者们越来越倾向于使用原生代码,而不依赖第三方库。...所以,推进原生语法广泛使用度已经非常必要了。 5个值得关注数组方法 下面,我将介绍ES 5非常有用5数组方法,这5方法可以提高开发者工作效率。...5. reduce() 对数组所有元素调用指定回调函数。 该回调函数返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供  老实说,在使用reduce()之前我斟酌了很久。...function类each方法,现在each方法可以被数组以外对象使用了。

1K70

Swift 编写网络层单元测试

我推荐他去看《单元测试艺术》(这本书让我对单元测试有了新认识),但由于该书是以 C# 为例写,可能会对 iOS 开发朋友造成一定阅读障碍,所以我还是决定填一下坑,简单介绍一下用 Swift 进行网络层单元测试方法...不过由于 Swift 函数式特性,像《单元测试艺术》中那样单纯地用 OOP 思维编写测试可能会有些麻烦,本文临近结尾部分写了一点自己用过使用“伪装函数”进行测试方法,可能大家以前没见过,我自己也是突然想到...其实 Alamofire 就有采用我上面说方法进行测试,所以如果你网络层像我一样是以 Alamofire 为基础构建,那就表示你不太需要再去写这样测试了,你只要保证跟 Alamofire 无关那些代码本身逻辑正确...由于该方法使用了parseResult方法,当然我也要测试这个方法正确性: let testKey = "testKey" let jsonDictWithError: [String: AnyObject...code, 666) } } 我觉得这是非常具有 Swift 风格单元测试,不知道别人有没有用过。

2K20

HTTP 请求轻松搞定:Swift 网络编程不二之选 | 开源日报 No.38

Alamofire/Alamofire[1] Stars: 39.8k License: MIT Alamofire 是一个用 Swift 编写 HTTP 网络库。...完美兼容 Swift 并发,支持 iOS 13、macOS 10.15、tvOS 13 和 watchOS 6 及以上版本。 提供 URL/JSON 参数编码,轻松应对各种数据传输需求。...该项目具有以下核心优势: 简单易用 format API,支持用于本地化位置参数 实现了 C++20 标准中 std::format 函数 类似于 Python format 函数格式字符串语法...; 具有广泛测试覆盖率和连续模糊测试来确保代码质量稳定性。...该项目具有以下核心优势: 提供丰富元数据 可以轻松定制解决方案 包含大量常见第三方域名信息 相关链接 [1] Alamofire/Alamofire: https://github.com/Alamofire

31820

Jekyll-Admin-Mac-列表

5C515420-600F-480D-B9FD-6F40380DA47B 关于 NSTableView使用 接下来我们需要就是做出这个列表数据,我们可以使用 NSTableView来做出这个效果。...02DC506D-3B0A-49A7-BAF1-4AC5ED6137DC 我们列表样式已经基本上搭建完毕了。 请求 Jekyll Post文章列表。 获取 Post 文章列表请求详情。...关于泛型参数 对于 泛型参数在 OC和 Swift一直没有明白过来,也一直掌握精髓,到现在都不会用。 现在要封装请求,对于代理回调应该需要用上 泛型参数,研究一下。...我还尝试过在 BaseListView使用其他泛型类间接代理,但是依然无法解决我们问题。 我现在唯一能够想到方案就是所谓协议,用协议声明泛型参数。...deinit方法 我们在 Objective-C开发里面经常在 dealloc注销通知,减少资源消耗。我们在 Swift里面可以使用 deinit函数。

3.1K10

5 分钟,带你快速撸一个 iOS App

然后,使用 Xcode 创建一个项目 这里模版选择 iOS App,输入项目名称,编程语言选择「 Swift 」,点击下一步完成项目的创建 ?...PS:Swift 相比 OC,语法更加简洁明了 最后,为新创建项目指定 Sign 签名 这部分如果有疑惑,可以点击文末阅读原文去了解 3....实战 实战部分,我们以一个简单登陆页面来进行讲解 3-1 安装依赖库 由于项目使用 Swift 开发,这里推荐使用 SPM( Swift Package Manager )来安装依赖 比如,网络请求库...「 Alamofire 」 项目地址:https://github.com/Alamofire/Alamofire 安装方式:File - Swift Packages - Add Package Dependency...3-2 页面布局 打开项目根目录下「 ContentView.swift 」文件,在 body 下编写具体视图 首先,使用 VStack 定义一个垂直布局盒子,并定义子控件水平居中展示 PS:SwiftUI

87640

成为一名优秀 Swift 开发人员 10 个小技巧

此外,通过代码导航可以在导航时更好地控制共享参数和特定行为。还可以避免让 Storyboard 变得一团糟。 5. 在项目中集成最热门第三方库 尽量不要重新发明轮子。...幸运是,我有一位 UI/UX 专家与我一起工作,为我提供了很多有关如何正确操作建议。...在开发文档中,通知是在控制器模型或服务之间实施通信可同步模式正确方法,我在项目中经常使用 Notification Center,基本上实现了观察者模式,并让应用程序带有更多响应式元素。...事件操作中 sender 参数非常有用 最后一个技巧是使用 sender 参数。每个响应事件方法或选择器都可以知道是谁触发了事件。...在常见情况下,请考虑这样一个场景,使用具有相似行为多个按钮,来处理相同操作。

2.3K40

高仿ios斗鱼界面

最近也是因为入门swift不久,在网上找了一个项目就开始模仿,本项目用到第三方库: Alamofire Kingfisher Swift3.0蝶变 swift3.0相对于2.x,渐渐脱离了...Swift版本更新升级 我们不需要再修改老版本 Swift 语言编译库了。...弹性/韧性 解决易碎二进制接口问题 Fragile binary interface problem是面向对象编程语言通病 如果在程序中引入了外部库 我们程序中使用并继承了该外部库中类 如果外部库有改动...新API设计规范 Swift3.0 发布了新语言设计规范 其中在Swift3.0中标准库和核心库将会遵循这个设计规范。...HTTPMethod.get : HTTPMethod.post Alamofire.request(URLString, method: method, parameters: parameters

74250

ios仿斗鱼界面

最近也是因为入门swift不久,在网上找了一个项目就开始模仿,本项目用到第三方库: Alamofire Kingfisher Swift3.0蝶变 swift3.0相对于2.x,渐渐脱离了oc和c...弹性/韧性 解决易碎二进制接口问题 Fragile binary interface problem是面向对象编程语言通病 如果在程序中引入了外部库 我们程序中使用并继承了该外部库中类 如果外部库有改动...全面支持泛型特性 Swift 2.2已经很好支持泛型 但是还不够完善,Swift 3.0开始 将全面支持泛型所有特性。...新API设计规范 Swift3.0 发布了新语言设计规范 其中在Swift3.0中标准库和核心库将会遵循这个设计规范。...HTTPMethod.get : HTTPMethod.post Alamofire.request(URLString, method: method, parameters: parameters

86290
领券