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 吧:


继续阅读...
   发表于

Open Source - Nimble 库进行单元测试

Nimble 从字面上看是 敏捷,灵活 的意思。Nimble 是一个库,一个 断言库。这个库一般用于单元测试。Xcode 6 为我们集成了 XCTest 单元测试库。在正式介绍 Nimble 之前,我们有必要先介绍一下 XCTest。我们在使用 Xcode 新建项目的时候会发现它为我们创建了两个 Target,一个是我们项目的 Target 还有一个就是测试 Target

我们看到了 Xcode 为我们自动生成的 Target,我们按下 Command + U 即可运行测试项目,并且在 Xcode 的左边会显示测试结果:


继续阅读...
   发表于

Swift Tips - swift 命令行工具初探

亲爱的同学们好,今天我们要介绍这么一个东西。相信有过解释型语言(PHP,Ruby,等)使用经验的同学会更加熟悉,就是 Swift 也为我们提供了命令行运行工具,俗称 REPL。好了,我们进入正题,在安装好 Swift 开发环境的机器上,打开命令行,输入 swift 命令,就进入了 swift 命令行运行模式:

Welcome to Swift version 1.1 (swift-600.0.20.0). Type :help for assistance.
1>

现在,Swift 命令工具已经启动了。电脑前的同学们,请你们也打开自己的 Swift 命令工具,来和我一起进行下面的实验。


继续阅读...
   发表于

Swift Explore - 关于 Swift 中的 isEqual 的一点探索

在我们进行 App 开发的时候,经常会用到的一个操作就是判断两个对象是否相等。比如两个字符串是否相等。而所谓的 相等 有着两层含义。一个是值相等,还有一个是引用相等。如果熟悉 Objective-C 开发的话,就会知道 Objective-C 为我们提供了一系列 isEqual: 方法来判断值相等,而 == 等于号用来判断引用相等。 我们来看一个 Objective-C 的例子就会更加明白了:

1
2
3
4
5
NSArray *arr1 = @[@"cat",@"hat",@"app"];
NSArray *arr2 = @[@"cat",@"hat",@"app"];
NSLog(@"result %i", (arr1 == arr2)); // result 0
NSLog(@"result %i", [arr1 isEqualToArray:arr2]); // result 1

上面的代码中,我们定义了两个数组,arr1arr2 这两个数组中保存的是同样的元素。接下来我们对他们进行相等比较并输出结果。第一次我们用 == 等于号进行比较,返回的结果是 0, 也就是说比较失败了。原因相信有些经验的同学都应该明白,是因为 在 Objective-C 中 == 比较的是引用,因为 arr1arr2 是两个不同的对象,所以即便他们的值相同,但他们的引用也不相同。所以 == 比较会失败。而第二个比较用得是 NSArray 的 isEqualToArray 方法,这个方法是用来进行值比较的,因为这两个数组的值相同,所以 isEqualToArray 的比较方法会返回 1。


继续阅读...
   发表于

Swift Tips - Array 类型

在开发中,数组这个概念我们应该很熟悉了,Objective-C 中为我们提供了 NSArray 作为数组的实现。大家应该对很熟悉了。而在 Swift 中,为我们提供了它自己对于数组的实现,也是这里我们要介绍的,就是 Array 类。

Array 的官方文档可以参看这里: SwiftStandardLibraryReference

废话不多说,下面就开始我们的主题啦。


继续阅读...
   发表于

Swift Tips - 在 Swift 中自定义下标访问

在 Swift 中,我们可以使用下标轻松的访问数组中的元素。比如这样:

1
2
3
var numbers:Array = [1,2,3,4,5]
println(numbers[2])
println(numbers[4])

还可以以字典的模式来进行下标访问,比如这样:

1
2
var props:Dictionary<String,String> = ["name":"Swift","speed":"fast","level":"robust"]
println(NSString(format:"%@ is a %@ and %@ language",props["name"]!,props["speed"]!,props["level"]!))

相信对编程稍微有些了解的同学,对这个特性都不会感到奇怪。所以到这里大家可能会有些疑问了,这有什么奇怪的呢,任何一门编程语言几乎都有对下标访问的支持。

没错,如果单单是下标访问的支持,确实并没有什么可说的。而 Swift 确更进了一步,问我们提供了更多的东西。

这就是, Swift 中不但提供了对数组等内置集合进行下标访问,更支持了让我们对自己的类自定义下标访问方法的特性。也就是说任何我们自己的集合类,比如数据库实体类,都可以用我们自己定义的方法来实现下标访问操作符。

继续阅读...

   发表于

使用 Swift 制作一个新闻通知中心插件(2)

我们在第一部分的文章中详细讲解了创建一个通知中心插件的整体过程。我们成功的在通知中心里面显示了新闻列表。但是截止到目前,我们还不能从通知中心的列表中查看新闻的详细内容。在这次的教程中,我们就以上次的教程为基础,继续将我们的通知中心插件的功能改进完善。如果您没有看过第一部分的教程,就请先参看教程的 第一部分


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


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