使用 Swift 和 Vapor 写一个 Telegram 机器人

前置阅读 用 Swift 的框架 Vapor 写服务器这事儿怎么样? 使用 ngrok 将 localhost 发布到网上 什么是 Telegram Bot? Telegram Bot 通过在聊天界面里交谈来提供服务 如果你只是想提供一个核心服务(或者测试一个产品想法),开发那么 Bot 很适合。 如何创建一个 Bot 因为不需要经过国内复杂的审核备案,创建一个 Telegram Bot 简单的令人发指。 在 Telegram 里添加 @botfather

使用 ngrok 将 localhost 发布到网上

在上一篇博文里,用 Swift 的框架 Vapor 写服务器 我们写了个简易的服务器,那么如何才能让别人能够访问到你呢? 传统一点来说,可以在你家里的路由器上设置下端口转发,但这个太麻烦了,ngrok 这项服务可以一条命令这个问题。 安装 ngrok 如果你没有安装 homebrew 你可以按照官网上的指南安装,但如果有 homebrew,这件事就变得超级简单了。 brew cask install ngrok 安装完成后,去 官网 注册个账号,你可以在 Auth 页面找到授权令牌。使用下面的命令,

用 Swift 的框架 Vapor 写服务器这事儿怎么样?

基石 就 Swift 写服务器这件事来说,需要一个非常现实的理由为什么用 Swift, 不然 Python Ruby Go 随便抓一个,可能都好上一百倍。 “快”并不是第一因,真的在生产环境跑起来,往往数据库的 IO 才是第一瓶颈。为了解答自己的这个疑惑,我研究了一番 Vapor 的实现方式。 在 HTTP+Server.swift 这个文件里,能看到服务器处理请求的方式 private let queue = DispatchQueue(label:

打造一个更流畅的 iOS App (上)

这篇文章应该是欠了很久了,本来应该是……半年前写的文章,不过还好我最终还是找时间写下来了。 在开始聊技术之前,我们可以先探讨一个问题,就是为什么要打造流畅的 App 体验? 流畅的体验意味着优秀的用户体验,技术的本质是为人类服务,脱离了为人类服务,再高超的技术,算法,工程都不具备价值。 因此,我所理解的技术的觉悟有以下三个 技术即服务 将优秀的产品交付给用户,让生活变得更美好 深入技术的细节,获得条理清晰的美感 总之就是让世界充满爱。 下面这张图,列出了最容易遇到性能问题的两部分,第一部分是用户直接打交道的界面层,另外一部分是数据层。 Layout Layout 有一些常见的 Case 和盲点,这个在

iOS

使用 CocoaPods 进行团队协作

让程序流畅稳健的运行是开发者们的理想,这个理想时而遥远,时而近在咫尺。而往往那个触手可及的时刻,却正是梦碎的边缘。 在团队协作中,修改别人的代码是一件像扫雷游戏一样的事情,你永远不知道你做的到底是 “优化” 还是 “触雷”。 使用 Cocoapods 将不同的功能进行切割,独立成模块再整合进 App,成为了一个行之有效的方法,本文就来一起研究一下如何使用 CocoaPods 来进行组件模块化。 创建自己的 Pod 以 RichTextView 为例,完成类库的功能后的第一件事就是创建 RichTextView 的 podspec 描述文件 进入项目的根目录 pod spec

Design

UI 设计入门视频教程合辑

这一部分整理自 《给女朋友的 iOS 开发视频教程》 里的前三章 Design 在 Design 章节,我们一起通过拯救糟糕的设计,来寻找设计的感觉。 Design An App 在 Design An App 章节,我们一起来研究一下一款 App 是如何被设计出来的。 Design Lolita 这一章我们一起使用 Sketch 来设计 Lolita,一起来探索下 Sketch 的神奇世界吧! 如果你对接下来的内容兴趣盎然,那么不妨查看

iOS

15 分钟带你入门 Fuse

Fuse 这个技术令人兴奋,不仅可以用来做交互原型,还可以导出成 iOS 和 Android 的原生 App 供生产使用,重点的重点在于输出的成品品质不错,所以私以为值得学习一下 (官方也表示以后会支持导出 Mac,Linux,Windows App)。 我们来通过一张图了解一下 Fuse 做了什么。 所以 Fuse 是一种和 Qt 类似的技术,通过一个中间层封装系统的 API 来实现 “一次编写,到处调试” 的伟大理想。 但是没有了 Qt

iOS

MDHTMLLabel —— 轻量级 HTML 文本的解决方案

对于复杂的文本格式,后端同学给你的往往会是 HTML,而 iOS 除了 WebView 和一个巨卡无比的 TextView 渲染方案,并没有别的选择。 上一期 使用 TextKit 定制全功能的 TextView,我们使用了 TextKit 以及正则匹配的方法实现了对特定格式的文本解析。 MDHTMLLabel 则是基于 CoreText 用正则对 HTML 进行了解析,实现了一个轻量级的方案,项目代码使用 Objective-C 编写,支持 Swift 项目调用。 MDHTMLLabel

textview

使用 TextKit 定制全功能的 TextView —— RichTextView

在 iOS 7 之后,苹果提供了 TextKit 方便我们去定制文本的显示方式,虽然不如 CoreText 用起来可控性高(超强方案你可以查看此 YYText 这个类库),但是已经可以完成绝大部分你可能用到的定制。 如果你只是需要某一部分特性,不妨自己动手来完成,RichTextView 有以下特性 Mention HashTag URL Email Image Custom Placeholder Interaction Delegate 支持多种常见类型,自定义类型的检测,插入图像,交互事件和文字样式的定制,那么接下来一起看下基本的实现原理。 自定义

iOS

iOS App 的内存释放问题

循环引用 这个是非常常见的一个问题,你可以从这里获取我们的演示 Demo 例如我们创建了一个 BadGuy() 功能只有一个,可以存一个闭包。 class BadGuy: NSObject { var holdAction: (() -> Void)? } 然后我们从外层 ViewController 通过 Push 的方法进入 DetailViewController,DetailViewController 里创建了 10000 个 UIView 来占用些内存,badGuy 通过闭包修改了下 DetailViewController 的 hello

iOS

监听动画过程中 CALayer 的属性改变

有时候可能需要追踪某个物体在动画过程中的属性改变,使得另外一个物体进行同步的属性改变,这时候就要用 CALayer 的 presentationLayer() 来获取 var whiteView: UIView! let displayLink = CADisplayLink(target: self, selector: "displayLinkCallback") displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes) UIView.animateWithDuration(0.25, animations: { self.whiteView.frame.

iOS

优化侧滑返回与 ScrollView 的兼容性

倘若在 ViewController 中添加了一个 TableView,那么很可能在侧滑返回的时候,反而先触发了 TableView 的上下滚动,这一点是非常恼人的。 通过 requireGestureRecognizerToFail() 这个方法,就可以很好的处理这个问题。 if let gestures = navigationController?.view.gestureRecognizers { for recognizer in gestures { if recognizer.isKindOfClass(UIScreenEdgePanGestureRecognizer) { scrollView.panGestureRecognizer.requireGestureRecognizerToFail(recognizer as! UIScreenEdgePanGestureRecognizer)