Hanson's Blog.

Hanson's Blog.

Viva La Vida

Swift的泛型小总结
[TOC] 本文针对网上一些关于泛型的知识点进行汇总和总结,已在文中标记出参考文章的链接 泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。 Objective-C 缺乏一个重要特性:不支持泛型。幸运地是,Swift拥有这一特性。==泛型允许你声明的函数、类以及结构体支持不同的数据类型==。 泛型代码可以让你写出根据自我需求定义、适用于任何类型的,灵活且可重用的函数和类型。它的可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图。 泛型是 Swift 强大特征中的其中一个,许多 Swift 标准库是通过...
在Swift扩展里添加"存储属性"
由来最近 ImageGotcha 收到了第一封用户反馈的邮件。这个用户希望可以有 Dark Mode。ImageGotcha 只是一个工具类 App ,好像也没有什么必要加上这个黑夜模式,不过我还是去想了想如何给应用加上黑夜模式,或者说加上一个换肤的功能。 基本的思路就是 post 一个自定义的 NSNotification,然后在需要修改颜色的地方监听这个通知然后进行修改。按照惯例,我还是去 Github 上搜搜,看看别人是怎么做的。然后发现一部分人的做法是给现有的 UIKit 控件添加扩展属性,然后可以在定义这些控件的时候指定不同模式下的颜色,这的确是一种好方法。那么是如何在 Swi...
上架个小工具-ImageGotcha
上架了个小工具。ImageGotcha 是一个 Safari 的 Action Extension,它可以提取当前网页的图片方便查看和批量保存,比如可以去某些 Instagram 用户的主页批量下载图片,或者下载 Bing 的每日背景图等等。点击 这里 到 AppStore 查看。 ImageGotcha 也做了国际化,支持英文、简体中文、繁体中文、日语以及韩语。要想使用ImageGotcha,需先在 Safari 开启这个Extension,App 内有操作指导,如下图是各种语言的指导说明: 这是演示如何启动 ImageGotcha 的 Action Extension: 这是...
使用SVN建立和发布私有CocoaPods库
[TOC] SVN 项目结构首先,一般 SVN 项目有如下的结构: trunk:项目主干 branches:开发或者 Bug 分支 tags:发布的版本 比如说我们已经写好了一个 CocoaPods 的库,它的名字是 xxxKit,那么它应该在看起来是这样的: 建立 CocoaPods 库我们在 trunk 的目录下执行 pod lib create xxxKit 按照提示输入后,在该目录下就会利用 CocoaPods 的模板生成了一个项目。我们主要关注xxxKit.podspec 这个文件。 修改 xxxKit.podspec,比如: 123456789Pod::Spec...
通过RunScript给iOS项目自增版本号(Versioin和Build)
需求分析 在打包应用之后,需要自增 Version 的最后一位 和 Build 的值。 只在 Archive(Release) 的时候触发该自增。 添加 RunScript在 项目Target -> Build Phases -> 点击+号 -> New Run Script Phase 然后添加如下内容:1234567891011121314151617181920if [ $CONFIGURATION == Release ]; thenecho "当前为 Release Configuration,开始自增 Build"plist=${INFOPLI...
PathToGo诞生记
不知道大家在使用 Mac 的时候有没有这样的需求: 经常需要获取当前文件或者文件夹的路径,并且复制到粘贴板。 对于我来说经常有这种需要,然后我就从网上再结合自己的经验,找了好几种方法: 右键-选择「显示简介」,然后在弹出的窗口里直接用鼠标拖动复制「位 置」里的路径。 ​ 缺点:麻烦。 把文件拖到浏览器,在浏览器地址栏复制路径。 ​ 缺点:麻烦。 打开终端,把文件拖入终端,终端会把文件路径打印出来,然后复制。 ​ 缺点:麻烦。 打开终端,cd到目标目录,然后输入 「pwd|pbcopy」就可以把路径复制到粘贴板。 ​ 缺点:麻烦。 选择...
用SwiftGen管理UIImage等的String-based接口
问题现状平时我们使用UIImage,UIFont,UIColor会遇到很多String-based的接口方法,比如常用的UIImage:1let testImage = UIImage(named: "test") 对于上面的代码,如果我们把 test 拼写错了,Xcode 并不会给出提示,只有当我们运行的时候才会收到报错,这样维护起来是有一定成本的。 代码解决我们可以用类似如下的代码来解决这个问题:1234567891011121314151617181920212223242526import UIKit.UIImagestruct ImageAssets { fi...
Swift 实现启动屏动画
Github: SplashAnimate 准备工作:首先我们需要确定作为宣传的图片的宽高比,这个一般是与 UI 确定的。一般启动屏展示会有上下两部分,上面是宣传图片,下面是 App 的 Logo。 实现基本思路:在 LaunchScreen 结束后,在 AppDelegate 中将 rootViewController 指向展示广告用的 AdViewController,在AdViewController 中设置一段时间后自己销毁,并提供回调方法在 AppDelegate 中将 rootViewController 指向 App 真正的首页。 实现细节:新建一个 AdViewCo...
记一次失败的 Swift 元组数组实践
想建立一个元组的数组,来简单存放构建 TabViewController 的信息首先我的做法是1234567let homeTab = (vc: VYHomeViewController(), title: "Home", image: "home_gray", selectedImage: "home_blue")let infoTab = (vc: VYInformationViewController(), title: "Info", image: "home_gray", selectedImage: "home_blue")let marketTab = (vc: VYMar...
自定义 UISegmentedControl 样式
系统的 UISegmentedControl 是个挺方便的控件,这里来讲讲在 Swift3 下自定义 UISegmentedControl 的样式,包括修改底色,边框颜色等等。 要了解 UISegmentedControl 各个部分的组成,可以在官方的文档中找到 UISegmentedControl 文档 。着重注意这个图: 上面这幅图明确的列出了 UISegmentedControl 各个部分所控制的方法。下面就开始自定义吧。 首先我们先做一个通过颜色生成图片的的一个扩展方法:1234567891011121314extension UIImage{ publ...
Hanson Zhang
witness me