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

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

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 制作一个新闻通知中心插件(1)

随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个。通知中心就不用过多介绍了,相信大家对这个都很清楚了。在以往的 iOS 版本中,我们只能使用 iOS 系统自带的有限的几个 通知中心组件。 这次新开放的这个功能,就相当于为大家提供了一个全新的市场。相信通过大家的智慧创造,一定会出现很多非常流行的应用。

其他就不多说了,现在我们来以一个新闻插件作为例子,来为大家介绍如何来创建一个 通知中心 插件。我们做好之后,大概就是这个样子:


继续阅读...
   发表于

浅谈 Swift 中的 Optionals

对于刚刚接触 Swift 的大家来说, Optionals 这个概念可能会让大家觉得有些陌生。这里就简单的和大家介绍一下 Swift 中的这个概念。

关于 nil

对于使用 Objective-C 进行过开发的朋友来说,nil 这个值并不陌生。任何 Objective-C 中的变量,都可以赋值为 nil,并且对值为 nil 的对象调用方法,不会进行任何实际的操作。

而在 Swift 中,nil 的含义和 Objective-C 中的有所不同。首先,Swift 中无论变量或是常量,都不能被赋予 nil。 它们必须有一个明确的初始值。


继续阅读...
   发表于

在 Swift 中实现单例方法

我们通常在进行开发的时候,会用到一个叫做 单例模式 的东西。相信大家也都对这种模式非常熟悉了。而且单例的使用在平时的开发中也非常频繁。 比如我们常用到的 NSUserDefaults.standardUserDefaults()

在 Swift 中我们如何实现单例模式呢?如果你曾经对 Objective-C 比较熟悉的话,你可能首先会想到这样写:

1
2
3
4
5
6
7
8
9
10
11
12
class DBManager {
class var instance: DBManager?
class func sharedInstance() -> DBManager {
if !instance {
instance = DBManager()
}
return instance!
}
}

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


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