iOS 开发者旅途中的指南针 - LLDB 调试技术

今天给大家介绍的内容,无关乎任何功能性开发技术,但又对开发的效率影响至深,这就是调试技术。

何为调试呢,比如我们用 print 函数在指定位置进行输出,来定位某些节点的变量内的取值:

1
2
3
4
5
let result = parseJSON("[1,2,3]");
print(result);
result = parseJSON("error");
print(result);

相信我们大家看到类似这样的代码都不会陌生,估计为开发者朋友都会或多或少的用这样的方式对程序进行调试。

这种方式有它的方便之处,就是我们不需要太多思考,需要跟踪某些地方的时候,直接输出就可以得到调试信息了。但这样做也有它的弊端,就是我们每次这样调试,都要反复的编译,运行,然后写进新的 print 语句,再继续编译,运行。反复的编译,运行会比较消耗时间。并且我们再调试完之后,很容易会忘记将调试语句删除,导致很多输出语句遗留再代码中,随着项目的长期进展后,这样会对项目后期的调试造成很多干扰。

而且,当我们想再次调试这段区域的时候,我们不得不再次写上这些输出语句。而有时对于稍微复杂一些的调试场景,print 输出这样的方式,往往还不能太好的应对。


继续阅读...
   发表于

深阅读 - swiftyJSON 源码研究 第一篇

我们在之前的文章中专门介绍过 SwiftyJSON 库,帮助我们方便的在 Swift 语言中处理 JSON 数据。SwiftyJSON 是一个开源的第三方库,它的代码我们可以在 github 上面找到。并且 SwiftyJSON 的代码,可以称得上短小精悍。
只有短短的 1000 多行代码。但虽然只有这么段的代码,却涵盖了一个第三方库该有的大部分编码标准,看完这篇文章后,你的功力就会大幅提升。为什么呢?

答案很简单,就是你可以用 API 设计者的思维来思考问题啦。这种思维角度非常的重要,

继续阅读...

   发表于

iTerm - 让你的命令行也能丰富多彩

今天要给大家介绍一个工具: iTerm。这次我们讲的和开发技术无关,只是一个工具。但虽然是一个工具,却能让你的功力提升一个层级。下面我们就来一看究竟。每一位开发者都难免要用到命令行,从 git 版本库操作,到运行一些脚本,都离不开命令行。虽然现在的图形界面已经很强大了,但在很多情况下,使用命令行仍然是最快捷的方式。


继续阅读...
   发表于

Swift 与 JSON 数据

我们大家平时在开发 App 的时候,相信接触最多的就是 JSON 数据了。只要你的 App 有读取网络数据的功能,你就免不了要与 JSON 打交道。比如你做一个新闻 App,你要读取和解析新闻数据,这样才能显示给用户。

那么我们今天就来了解一下 JSON 以及它在 App 中的应用吧。


继续阅读...
   发表于

Swift Cafe 近期精选

之前写的技术文章,这次为大家进行了整理,包括 Swift 中的很多概念,Optionals,CocoaPods,闭包,以及一个应用的例子。不足之处还有很多,希望大家在阅读过程中多多提意见。秉承快速迭代的互联网思维,努力提升大家的阅读体验。


继续阅读...
   发表于

Swift Cafe 近期精选

之前写的技术文章,这次为大家进行了整理,包括 Swift 中的很多概念,Optionals,CocoaPods,闭包,以及一个应用的例子。不足之处还有很多,希望大家在阅读过程中多多提意见。秉承快速迭代的互联网思维,努力提升大家的阅读体验。


继续阅读...
   发表于

关于 Swift 2.0 - 语言新特性与革新

随着刚刚结束的 WWDC 2015 苹果发布了一系列更新,这其中就包括了令人振奋的 Swift 2.0。 这是对之前语言特性的一次大幅的更新,加入了很多实用和方便的元素,下面我们就一起来看看这次更新都包括了什么。

将 println 函数统一为 print

现在我们在代码中输入 println("xxx") 这样的调用时,编译器就会报错:

都已经变成通用的 print 方式了:

1
print("xxx")

语言的结构性更强

比如在 Swift 1.2 中,我们要判断某元素是否在数组中,我们会用到 contains 函数:

Swift 1.2
1
2
3
4
5
6
7
var apps = ["Youtube","Google","Facebook"]
if contains(apps, "Google") {
println("ok")
}

而在 Swift 2.0 中,变成了直接调用数组对象 appscontains 方法进行这个操作,这种调用方式更加的结构化,和面向对象化:

Swift 2.0
1
2
3
4
5
if apps.contains("Google") {
print("ok")
}

继续阅读...
   发表于

extension 的一个应用 - 优化图片的读取机制

枚举和 extension 都是 swift 中非常好用的特性。这里我们就来讨论一个应用的例子,供大家参考。

我们在开发 app 的时候,都会用到各种图片资源,而我们读取图片资源时主要是通过UIImage 来操作的。比如这样:

1
var icon = UIImage(named: "mushroom")

继续阅读...
   发表于

关于枚举,你应该了解的东西

谈到枚举,相信我们大家都并不陌生,大多数编程语言中,都有枚举的实现。关于枚举的定义,我们可以看看这里

swift 对枚举的进行了更加灵活的实现,比如支持关联值的枚举,还有可以设置原始值的枚举。这都扩展了枚举类型的用途。下面我们就来品味下枚举以及它在 swift 中的实现吧。


继续阅读...
   发表于

关于枚举,你应该了解的东西

谈到枚举,相信我们大家都并不陌生,大多数编程语言中,都有枚举的实现。关于枚举的定义,我们可以看看这里

swift 对枚举的进行了更加灵活的实现,比如支持关联值的枚举,还有可以设置原始值的枚举。这都扩展了枚举类型的用途。下面我们就来品味下枚举以及它在 swift 中的实现吧。


继续阅读...
   发表于

关于 iOS 事件处理以及 UIResponder 的一点探索

大家在进行开发的时候,肯定会处理各种事件,比如触摸事件。而大家在处理这些事件的时候,肯定会用到这几个方法:

touchesBegan(_:withEvent:)
touchesMoved(_:withEvent:)
touchesEnded(_:withEvent:)
touchesCancelled(_:withEvent:)

我们只要想处理触摸事件的时候,就会用到这几个方法。如果更仔细的观察,相信大家会有这样一个发现,就是无论在 UIView 的子类,还是 UIViewController 的子类中,等等,我们都可以实现这几个方法。我们可以翻阅下 UIView 或者 UIViewController 的文档,我们就会发现,它们都继承自 UIResponder 这个类。这些事件处理相关的方法,其实都定义在 UIResponder 中。还有很多类都继承自 UIResponder, 比如 UIWindow,UIApplication 类。


继续阅读...
   发表于

通过减少动态调度来提升性能

Swift 和很多其他语言一样,允许类覆盖定义在它的父类中的方法。这就意味着程序需要在运行时才能确定具体引用的是哪个属性和方法,然后再间接的调用和访问。这种技术叫做 动态调度,这些动态调度增加了运行时的性能消耗。对于性能要求比较苛刻的程序的话,这个机制比较消耗。介绍几种方式来消除这样的性能消耗。

看一下这个代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Block {
var width = 0
var height = 0
func change(w:Int, h:Int){
width = w
height = h
}
func update(w:Int, h:Int){
change(w, h: h)
}
}
var block = Block()
for var i = 0; i < 2000; i++ {
block.update(i, h: i)
}

继续阅读...
   发表于

通过减少动态调度来提升性能

Swift 和很多其他语言一样,允许类覆盖定义在它的父类中的方法。这就意味着程序需要在运行时才能确定具体引用的是哪个属性和方法,然后再间接的调用和访问。这种技术叫做 动态调度,这些动态调度增加了运行时的性能消耗。对于性能要求比较苛刻的程序的话,这个机制比较消耗。介绍几种方式来消除这样的性能消耗。

看一下这个代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Block {
var width = 0
var height = 0
func change(w:Int, h:Int){
width = w
height = h
}
func update(w:Int, h:Int){
change(w, h: h)
}
}
var block = Block()
for var i = 0; i < 2000; i++ {
block.update(i, h: i)
}

继续阅读...
   发表于

关于 iWatch 的一点点了解

iWatch 已经发布了,对我们开发者而言,随之而来的就又是一波新机会。目前 iWatch 开发相关的资料也慢慢多了起来,那么这里也为同学们贡献一篇文章,以表对 iWatch 开发的关注。

我们这篇文章不过多涉及开发的细节,而是给大家一个对 iWatch 的概览。尽可能的让大家对 iWatch 尽快的了解。

下面我们就开始吧。

我们按下 iWatch 的 Home 键后,我们就会进入这个界面:

这里面向我们展现了 iWatch 上面现存的 App. 用手指在屏幕上拖动,就可以在这些 App 中选择并打开。 有一点要注意的是,iWatch 上不支持多点触控 也就是说像是在 iPhone 上那些双指缩放那种手势,在 iWatch 上就不可以的啦,这也很好理解啦,iWatch 的屏幕太小了嘛。


继续阅读...
   发表于

Swift 中的利刃,函数和闭包

关于闭包的概念,相信有过其他语言开发经验的朋友都不会陌生了。简单来说闭包的语言特性,大大增加了我们的开发效率。而 Swift 更是将闭包运用的游刃有余,仿佛为它而生。下面咱们进入正题。

Swift 中闭包的概念就像是 Objective-C 中的 block闭包可以嵌套和作为参数传递。 在 Swift 中,函数也只不过是一种特殊的闭包

定义函数

Swift 中 可以使用 func 关键字来定义函数。函数可以接收并返回一个或者多个参数和元组。 返回值跟随在 -> 符号后。

1
2
3
func sayHello(firstName: String, lastName: String) -> String {
return "Hello \(lastName) \(firstName)"
}

调用函数

1
prinln(sayHello("John", "Smith")) //"Hello Smith John"

继续阅读...
   发表于

Swift Tips - 当 Swift 遇上 CocoaPods

CocoaPods 作为 iOS 开发的包管理工具,几乎成为了 Objective-C 的行业标准。它为我们提供了非常方便的包管理功能。而苹果正式发布 Swift 语言也已经有半年多时间了,Swift 作为 iOS 开发语言发布后,迅速的被开发者们所接受。而随之而来的,就是越来越多用 Swift 写出得第三方库的管理问题。而 CocoaPods 的最新预览版已经支持了 Swift 语言。这对已经开始使用 Swift 来进行开发的朋友无疑是一个很大的福音。

CocoaPods 简介

这一小节是对 CocoaPods 一个入门介绍,如果您已经了解或使用过了 CocoaPods 就可以直接掉过本小节,继续下面的内容。几乎每个相对资深的 Objective-C 开发者都会对 CocoaPods 比较熟悉。CocoaPods 是一个 iOS 和 Mac OS 平台下开发库的包管理平台。更通俗的来说,就是一个让我们不必导出去找第三方库,而是帮我们来管理这些库的更新版本的一套工具。

让我们来用一个简单的例子来说明 CocoaPods 吧:


继续阅读...
   发表于
微信公众平台
更多精彩内容,请关注微信公众号


公众号:swift-cafe
邮件订阅
请输入您的邮箱,我们会把最新的内容推送给您: