iOS使用IconFont
IconFont的使用github链接背景: 最近设计提了要求,切图用IconFont一开始,在搜了IconFont的使用后,选中了TBCityIconFont,使用了之后,发现对于图片的支持不太好,就是长宽不等的图片,显示的时候会被截断,在具体实现里也没发现修改的地方。 然后就pass了,换了另一个Swift的Iconic的第三方库,这个库有个好处,是可以自动把.ttf文件里的Icon生成一个枚举使用的时候特别方便。然而缺点是安装的时候麻烦,之前只是稍微麻烦,最近变得特别麻烦,需要设置FONT_PATH。而且不支持最新版本的Swift,每次更新.ttf字体文件,都要改一次。 实在是受不了了,今天就抽空自己写(抄)了一个。😄有兴趣的可以自己看参考链接,其实就是参考链接里内容的整合。 实现首先,我想要的是,传入一个Int类型(eg: 0xe654)或者字符串类型(eg :\u{E61A})都支持。 然后如果是本地的文件,我希望可以不用手动收入unicode码。最后就是图片支持宽高不等的显示。 整体的原理是Working with icon fonts in iOS. Code...
Xcode插件的实现-JSON格式化
背景:开发中经常遇到需要格式化JSON字符串的情况,每次都是百度在线格式化解析好不方便,某天看到APP Store里有Xcode关于这个的插件,卖的老贵了,哈哈哈,于是就想自己也弄一个,先调研一下JSON格式化的实现原理,然后再看看Xcode插件的实现,最后还可以写个Mac版,给自己大大的赞😄
用搬瓦工搭建ss
因为工作的原因会经常使用Google搜索,最初一直是买的VPN,或者蓝灯,后来发现有时候下载东西的时候速度特别慢。然后想自己好歹也是个技术,要自己动手丰衣足食。 前年开始用搬瓦工搭建ss,19.9$一年,当时记得操作好麻烦,还求助了别人。然后去年续费,我感觉自己搭建的还蛮不错,自己用,看视频比较少,也不访问违法网站,速度也可以接受。 今年收到邮件说,不能续费了。。。。因为当时买的是openVZ,不支持续费了。要迁移到新的KVM。郁闷了好久。但还是要用啊。前阵子黑五的时候,就又买了个29.9$一年的,打算看看视频。买了之后,再次搭建,我发现,特别简单,不到十几分钟就搞定了。想想我还有上次搭建的阴影,也是够了。 至于为什么突然想弄一个关于这个的文章,一呢是老是会有人问我借账号用,不给用吧,不好意思,给用吧,又怕他们访问什么网站,把我的给封了。二来,是我想保存一下自己的操作流程,这样网上找不到的时候,自己还有个备份。 下面的内容都是转载的,但是我自己试过了,我的新SS就是按照步骤搭建的 转载搬瓦工 VPS 搭建 Shadowsocks (SS) 科学上网图文教程 | SS多用户配置...
昨日见闻
本来应该昨晚写日记的,但是晚上是在太冷,完全不想动,但昨天遇到的事情又确实想要记录,所以今天补录到博客里。 昨天去参加互联网周末的杭州余杭长乐林场活动。 计划永远赶不上变化,提前预留足够的时间还是好的因为要早上7:20集合,所以我定了3个闹钟;6:00起床,6:30出门,7:00上地铁。早上5点多起来去了个厕所,然后就等闹钟响,结果等我醒来才发现已经6:10分了,6:00的闹钟没响,因为我设置的就寝时间的问题。然后爬起来洗漱之后,出门已经是6:45了,路上买了个煎饼,到地铁站还不到7:00,然而地铁刚刚出发,下一班诡异的地铁空的,不开门,然后等我上车已经7:05了;不过好在我留的时间还算足够,没有吃到。 保持平常心我其实特别不喜欢自我介绍,因为容易紧张,而且不知道说什么。但由于参加的单身活动,所以自我介绍又是少不了的。我当时就感觉或许我不应该出来,又要搞砸了——整段垮掉。。。领队开了个好头,给了个模版,介绍自己名字、职业、哪里的人、兴趣爱好的话,美剧也算。就想自己要说什么,知道自己要说什么之后,再想怎么说。然后我开始试着调整,反正又没人认识,怕什么,而且又不是一定要在这次活动...
在Swift中使用error来控制流程
此文是翻译原文链接:Using errors as control flow in Swift app和项目里管理控制流会对代码的执行速度,代码的调试复杂度有重大的影响。代码的控制流本质上是函数和声明的执行顺序,及代码执行路径。 尽管Swift提供了很多工具定义控制流——例如if, else, while 及 optional;这周,我们来看一下,如何通过Swift编译时错误来抛出和处理model,来让控制流程更容易管理。 抛出可空的值可选值,作为Swift的重要特征,处理空的数据时可被合法的忽略;它也经常被用作给定函数的来源样板在控制流程中。 下面,重写了从app中bundle加载、调整图片的方法。由于每一步操作都返回了可空的图片,不得不写多个guard语句,告诉函数哪里可以退出: 12345678910111213func loadImage(named name: String, tintedWith color: UIColor, resizedTo size: CGSize) -> UIIma...
关于沟通2
选择积极自信的沟通方式与他人沟通,摒弃攻击性、退让性以及消极性的沟通 沟通时尽量采用第一人称 避免沟通到几个障碍:唱反调、泼凉水、回答“绝”句 巧妙的运用感官系统来和他人建立和谐关系 理性到回应他人到语言攻击 A. 小王,我今天没时间,你必须在下午下班前帮我把这个文件送到分公司B. 小王,我本来不想麻烦你,但是我有个文件要送到分公司,而我又没时间,所以。。。当然,如果你没时间,那就算了C. 小王,我有个文件要在下午下班前送到分公司,而我恰好没时间,如果你能帮我,我会非常感谢你。这是个很重要紧急到文件D. 小王,我想你肯定不是那种忘恩负义的人,我经常帮你,这次你得帮帮我了,把这个文件送到分公司去 提出请求四步法: 提出请求前的准备工作 开场白(简单明了的话和真诚的态度) 帮忙的理由,确认请求的结果 结束请求,表示感谢
Swift代码中的嵌套命名法
Swift代码中的嵌套命名法Swift支持与其他类型嵌套命名,尽管它还没有专用的命名关键词。下面我们来看看,如何使用类型嵌套来优化我们代码的结构。 大多数Swift开发者习惯于用类型在结构上的实际名字累命名。例如:PostTextFormatterOption(一个Text Formatter类型的用于format Posts的Option)。这可能是因为我们在Objective-C & C中,养成的别无选择的可怕命名习惯,被我们带到了Swift里。 下面我们用上面提到的类型作为例子,来看下Post、PostTextFormatter以及PostTextFormatterOption的实现: 123456789101112131415161718192021222324252627struct Post { let id: Int let author: User let title: String let text: String}class PostTextFormatter { private le...
简单的Swift函数的依赖注入
简单的Swift函数的依赖注入本文是翻译,原文链接:Simple Swift dependency injection with functions 依赖注入是一种很好的解耦代码的手段,使代码变得易于测试。比起来对象自己创建自己的依赖,从外部注入,使得我们可以设置不同的场景————例如在生产中 vs 在测试中。 在Swift中,大多数时候,我们用协议来实现依赖注入。例如,我们写一个简单的卡片游戏,用Randomizer(随机性发生器)画一个随机的卡片,如下所示: 12345678910111213141516class CardGame { private let deck: Deck private let randomizer: Randomizer init(deck: Dec, randomizer: Randomizer = DefaultRandomizer()) { self.deck = deck self.randomizer = randomizer } func dr...
使用@autoclosure来设计Swift API
使用@autoclosure来设计Swift API此文是翻译原文链接:Using @autoclosure when designing Swift APIs Swift @autoclosure 属性用于在闭包中定义一个“被包裹”的参数。主要用于延迟执行一段(潜在的耗时、占资源大)代码到真正需要的时候,而不是在参数传递时就执行。 在Swift标准库中就有一个例子,Assert函数的使用。由于asserts仅仅在debug模式下触发,所以没必要在release模式下执行代码。这时就用到了@autoclosure: 1234567891011func assert(_ expression: @autoclosure() -> Bool, _ message: @autoclosure() -> String) { guard isDebug else { return } // Inside assert we can refer to expression as a norma...
在Swift中使用构建者模式
在Swift中使用构建者模式和编程中其他的抽象和模式一样,构建者模式的目的是减少以保持可变状态——从而使对象更简单、且更容易预测。对象变得“少状态”,就会容易测试和调试——因为他们逻辑只存在单纯的输入输出。 尽管构建者模式在java中十分常见,然而在苹果平台上却很少遇到(至少和构建对象不同)。这周,我们来看一下,构建者