Swift 的可选值优化

在 Objective-C 中,nil 表示空对象,它本质是一个指向 0x00000000 的指针。但对于非指针的值类型,OC 中是无法表示没有值这个概念的,比如 NSInteger,它可以是 0,也可以是其他任何值,但就是不存在没有值。 Swift 作为一种强类型的语言,它从一开始就引入了没有值这个概念,虽然还是用 nil 关键字,但实际语义上有所不同。比如 Int? »

Swift编译器之迷惑行为二

在 App 工程中通过 Cocoapods 引入一个自己的 Swift 业务库 Pod1,该库中有一个 Swift 类服从一个 OC 的协议并实现了部分方法,例如: open class AppDelegate : NSObject, UIApplicationDelegate { open func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: »

CALayer 的 filters

CALayer 上有一个属性,一直以来大家都容易忽视,即:filters。而苹果官方文档上只给了 CIFilter 的示例,但事实上 CIFilter 设置进去后并没有效果,同时下方也指明了在 iOS 上不支持。(这里是 CIFilter 的完整列表) @interface CALayer : NSObject <NSSecureCoding, CAMediaTiming> /* An array »

UIView 显示调试边界

作为 iOS 开发者,我一直羡慕 Android 强大的开发者选项,如显示视图边界等。 而这一简单的功能,直到最近几个版本的 Xcode 才支持。真机调试运行起来后,点击 Debug -> View Debugging -> Show View Frames 效果如下图: 然而,只能在真机连接到 Xcode 时才能开启, »

从头构建你的第一个 Xcode 扩展

几天前的 WWDC 发布了不少新特性,其中之一便是 Xcode官方插件支持。用户可以像安装普通软件一样安装插件,增强它的源代码编辑功能。这也直接导致了原有的第三方插件都不可用。目前开放的接口非常有限,只能对代码进行纯文本处理,不过相信以后会逐渐开放更多功能。 本文向读者展示如何利用 Xcode 8 构建一个编辑器扩展,并实现一个具体的功能。以下项目的所有代码均可以在 Github 上找到。 创建 Mac app 工程 下载最新的 Xcode 8, »

一种组件化的 Table View 的实现

背景 最近在做一个项目时,需要实现一些列表界面,总体上是上下滚动的,中间的部分段有可以横滚的,有一个个小标签式的,也有可循环滚动的焦点图的……且类似的界面大量出现,并随机组合。可以参照网易云音乐,早期版本的蘑菇街,小红书等等。 按以往的想法是,继承 UITableViewController 然后分多个 section,所有的数据与点击都在一个 VC 中完成。如果全是占满行的 Cell,勉强可以接受,但很快你会发现,你的代码变得庞大而臃肿,且不可维护。 »

运行时环境变量

Xcode 中按 Shift Command , 可以快速编辑项目的 Scheme(或者从 Project -> Scheme -> Edit Scheme 选择),在 Arguments 下可以添加运行时的环境变量: 添加环境变量是调试利器,如调试调试僵尸对象(已经释放的对象引起的 Crash)时使用的 NSZombieEnabled 环境变量,以及调试 CGContext »