在 iOS App 中使用 AVSpeechSynthesizer 合成语音(普通话、英语、粤语等)

| Swift , iOS

Ficow 自己开发了一款 iOS 应用:小粤粤-学粤语,主要用来学习粤语。以前 Ficow 是将应用中需要播放的语音放到了阿里云上的对象存储空间。每次需要播放音频的时候,应用就会去阿里云的对象存储服务器下载音频文件。然而,这些音频文件的质量不是很好,而且音频本身对于调速功能的支持不友好。多次调研之后,Ficow 决定在应用内合成音频。 既然要合成音频,那么就要考虑用什么工具了!目前为止,Ficow 找到了这些比较好用的音频合成工具。快来了解一下吧~

Go Gin curl: (56) Recv failure: Connection reset by peer

| Go , Gin

使用 curl 请求 Go Gin 服务器 curl http://localhost:8000,响应结果为:curl: (56) Recv failure: Connection reset by peer。然后,使用 telnet 进行测试 telnet 127.0.0.1 8000,响应结果为: Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host. 好吧,连接被主机关闭了。为什么呢?

零基础学 Swift —— Ficow 陪你学 iOS 开发

| Swift , iOS

说实话,让 Ficow 教您零基础入门 Swift 还是非常有难度的!但是,这个事情不是非得让 Ficow 来做,而且其他人做得比 Ficow 更好! 依我看,做的最好的就是苹果啦!您没有看错,就是【苹果公司】!!!苹果为了普及 Swift,其付出的努力用呕心沥血来形容简直不为过! 最让我觉得赞叹的就是 【Swift Playgrounds】 这个应用,然后就是制作精良的【官方 Swift 文档】!

Ficow 陪你彻底搞懂 CALayer 里的 anchorPoint 和 position

| Swift , iOS , Core Animation

最近有同事在研究【Core Animation】的动画,这个动画需要将视图进行伸缩。具体的效果就像【把投影仪的投影幕布从上往下展开然后再从下往上收起】。这种情况就需要用【anchorPoint】将 layer 的锚点设置到顶部,然后动画就会以顶部为固定点来进行伸缩。 然而,这个工作进展地并不顺利。因为同事需要在刷新 UITableViewCell 的时候让 cell 内部的子视图进行动画,这时候动画和布局都出现了一些问题。于是,我意识到我们对于 anchorPoint 的理解是有问题的。所以,就开始进行深入的研究。于是,就有了这一篇文章。 Ficow 希望本文可以让您彻底理解【anchorPoint】和【position】,然后尽情地享受动画带给您的快乐~

macOS 使用 Charles 抓包 (HTTPS, 真机, iOS模拟器)

| 实用工具 , macOS

Charles 是 macOS 上常用的抓包工具,功能非常强大!本文主要讲解如何使用 Charles 捕获 HTTPS 请求的内容以及捕获局域网中的设备上的网络请求。 之前,有一些做开发和测试的朋友问过我,怎么用 Charles 抓 HTTPS 网络请求、怎么用 Charles 抓真机上的网络请求。然而,我没有找到一个可以非常详细地讲解这些内容的教程,所以我打算在别人的教程的基础上自己再写一篇更详细的文章。 现在,Ficow 就尽可能地将内容讲得详细一些,希望本文对大家有所帮助。 还没有安装 Charles 的朋友,可以到 官网下载 试用版,也可以到 xclient.info 去 下载。强烈建议大家支持正版~

零基础学编程和 iOS 开发—— Ficow 陪你学 iOS 开发

| Swift , iOS

本文的目标读者:想零基础学编程的朋友;想零基础学 iOS 开发的朋友。Ficow 会跟您讲解以下内容:为什么要学编程?iOS 开发是什么?为什么要学 iOS 开发?怎么学 iOS 开发,有什么前提条件?以及 iOS 开发学习资料推荐。

为什么需要写测试代码?如何用 XCTest 写单元测试代码?

| Swift , 测试 , XCTest

每一位程序员都听说过【测试】这个名词,然而并不是每一位程序员都会写测试代码,更不是每一位程序员都会主动地去写测试代码。 为什么呢? 1. 写测试代码【很难】吗? 2. 写测试代码真的很【费时费力】吗? 3. 是否有必要】写测试代码? 4. 某些代码真的【可以测试吗】? 5. … 有谁可以回答这些灵魂拷问?

如何创建自定义的 Combine 操作符?

| Swift , iOS , Combine

Combine 中已经内置了很多操作符(发布者),比如:map, filter, zip, merge, combineLatest 等。但是,Combine 并没有提供某些在 Rx 中较为常用的操作符,比如:withLatestFrom, concatMap 等。如果您感兴趣,可以参考这份详细的对照表:RxSwift to Combine Cheatsheet。 既然 Combine 没有提供,那么我们就自己造轮子吧!本文将由浅入深地逐步打造自定义的操作符,希望能够带给您些许启发~

Combine + MVVM 如何构建易测试的 ViewModel?

| Swift , iOS , Combine , MVVM , 架构

ViewModel 需要具备以下特性: 可插拔; 可测试; 采用绑定机制的 MVVM 模式会更加强大,所以 ViewModel 要充分利用 Combine; 把 ViewModel 当做黑箱,它可以接收输入,并产生输出,这就是定义 ViewModel 最好的原则。 本文将提供两种可行的方案,希望能够带给您一些启发~

RxSwift + MVVM 如何构建 ViewModel ?

| Swift , iOS , MVVM , Rx , 架构

ViewModel 需要具备以下特性: 可插拔; 可测试; 采用绑定机制的 MVVM 模式会更加强大,所以 ViewModel 要充分利用 RxSwift; 把 ViewModel 当做黑箱,它可以接收输入,并产生输出,这就是定义 ViewModel 最好的原则。 本文将提供两种可行的方案,希望能够带给您一些启发~