【K】
【Swift】从零开始学Swift App开发

本帖最后由 【K】 于 2014-7-15 17:32 编辑

本教程将从零开始教大家使用Swift来开发一款iOS计时器App。
本教程首发于自己跟朋友的swift小社区,技术宅(gn00.com)是二发,转载请通知注明!

前言
操作很简单:
  • 点击复位可以对时间清零;
  • 点击秒、1分、3分、5分可以不断增加倒计时时间;
  • 点击 开始/停止 来启动或停止倒计时;

通过此教程,你将学习:
  • 如何使用Xcode
  • 如何灵活运用Swift中的语法来解决实际问题;
  • 如何使用基本的UI控件UIButtonUILabel 来创建界面,使用NSTimer来触发定时事件,以及使用UILocalNotification来实现本地提醒。

项目源代码

托管在github

创建项目

首先,打开Xcode,新建一个项目,Xcode将提示选择一个工程模板。由于我们将从零开始学习,请在左侧窗口选则iOS/Application,右侧窗口选择Empty Application,点击Next,然后在Product Name项填入SwiftCounter,Language注意选择Swift,再点击Next,选择项目保存的路径,最后点击Create即可完成项目创建。
项目新建完成后,我们可以看到工程中已经自动生成了AppDelegate.swift文件。
应用代理类(AppDelegate)
AppDelegate类中定义了app进入不同生命周期(包括app启动动、闲置、进入后台、进入前台、激活、完全退出)时的回调方法。实际上在app启动时,app会自动执行一个叫main的入口函数,它通过调用UIApplicationMain函数来创建出AppDelegate类实例,并委托其实现app在不同生命周期的定制行为。
屏幕(Screen)、窗口(Window)和视图(View)
在app启动完成的回调方法application:didFinishLaunchingWithOptions中,首先创建一个UIWindow对象。在此,我先简单介绍一下iOS开发中基本UI元素:

  • UIScreen 代表一块物理屏幕;
  • UIWindow 代表一个窗口,在iPhone上每个app一般只有一个窗口,而在Mac上一个app经常有多个窗口;
  • UIView 代表窗口里某一块矩形显示区域,用来展示用户界面和响应用户操作;
  • UILabel和UIButton,继承自UIView的特定UI控件,实现了特定的样式和行为。

继续看application:didFinishLaunchingWithOptions中的默认实现:

[mw_shl_code=applescript,true] self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

self.window!.backgroundColor = UIColor.whiteColor()

self.window!.makeKeyAndVisible()[/mw_shl_code]

首先,它通过获取主屏幕的尺寸,创建了一个跟屏幕一样大小的窗口;然后将其背景色为白色;并调用makeKeyAndVisible()方法将此窗口显示在屏幕上。
视图控制器(ViewController)
在iOS开发中,主要使用ViewController来管理与之关联的View、响应界面横竖屏变化以及协调处理事务的逻辑。每个ViewController都有一个view对象,定制的UI对象都将添加到此view上。
为了给计时器创建页面并实现功能,我们需要新建一个视图控制器,命名为CounterViewController:点击文件,新建文件,类型选择Swift,然后输入类名CounterViewController,确定。
我们先为其添加基础的结构代码:
[mw_shl_code=applescript,true] import UIKit

class CounterViewController : UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

}

}[/mw_shl_code]

其中重载的方法viewDidLoad非常重要,它在控制器对应的view装载入内存后调用,主要用来创建和初始化UI。
在介绍如何定制计时器UI之前,我们需要先将CounterViewController的view跟app中唯一的窗口Window关联起来。完成此操作只需在application:didFinishLaunchingWithOptions中加一行代码:

[mw_shl_code=applescript,true] self.window!.rootViewController = CounterViewController()[/mw_shl_code]