《Swift入门经典(第2版)》——1.2 起步

1.2 起步

此时,最重要的假设是你已经具有一台Mac计算机,如果没有它,将不能安装Xcode,它是Apple的Mac和iOS集成开发环境(Integrated Development Environment,IDE)。
注意:下载Xcode

Xcode 7是从Mac App Store免费下载的,必须具有Mac OS X 10.10.4或更高版本。尽管可以在Xcode 6.x中编写Swift代码,但是本书还将包括Swift版本2.0,它需要Xcode 7。
在Mac上启动App Store应用,搜索Xcode,然后单击安装软件。一旦安装完成,Xcode就会列在/Applications目录中。

1.2.1 四处看看
在打开Xcode时,可能会询问你是否想安装额外的工具;继续前进并安装它们。应该只有在第一次启动Xcode时才会发生这种情况。一旦打开了Xcode,就会看到一个标准的菜单窗口,其中有一些选项,用于创建playground、创建新项目或者打开现有的项目,右边是最近的项目和打开的playground(如果打开了任何playground)的列表。窗口现在应该如图1.1所示。

尽管在本书中主要在playground中工作,但是熟悉一下IDE是有好处的,因此就让我们快速完成这个任务。单击Create a New Xcode Project,创建一个新的Xcode项目。下一个界面询问你想要创建的项目类型,对于这个试验,仅须使用Single View Application,如图1.2所示,然后单击Next按钮。

接下来,将要求命名项目。选择Organization Name、Identifier、Language(Swift或Objective-C)以及要运行项目的设备。这里还可以指示是否想要使用Core Data,或者包括Unit Tests和UI Tests,如图1.3所示。所有这些信息对于你将来创建的项目都是有用的,但是出于测试目的,我们还不需要关心它们,可以使这些复选框保持原样。Organization Identifier通常是个人或公司URL的反向DNS名称,用于在组织级确保唯一性。Bundle Identifier把Project Name附加到Organization Identifier末尾,用于确保每个应用包的唯一性。一旦把应用提交给Mac App Store或iOS App Store,包标识符就需要是唯一的。

在这里,还可以选择设备类型,比如iPhone或iPad,以便于Xcode可以正确地创建设备所需的故事板(Storyboard)文件,这些设备将使用你计划编写的应用。这样,就可以把不同设备上的不同接口作为目标,但是仍然使用相同的代码管理它们,比如利用Universal应用。

把项目命名为TestApp,因为我们只想熟悉Xcode(可以在以后删除这个项目)。一般来说,如果选择不含空格的项目名称,后面就可能遇到更少的麻烦。对于Language选择Swift,并单击Next按钮。Xcode将会打开,并且可以看到你创建的新项目。它应该如图1.4所示。

图1.4 初始的Xcode IDE布局。左边是导航窗格(Navigation Pane),右边是检查器窗格(Inspector Pane),中间是主要内容区。顶部工具栏中是一些按钮,用于运行或停止生成,查看错误和警告信息,以及显示或隐藏视图

Xcode被漂亮地划分成几个合乎逻辑的区域,就像在其他IDE中你可能所习惯的那样。不过,它还有一些非常好的特性要注意。左边的窗格称为导航窗格。在这里,可以选择不同的导航器,查看项目中的文件、警告和错误、断点、单元测试(Unit Test)等。右边的窗格称为检查器窗格,这个动态窗格依赖于单击的是什么元素而改变,比如编辑所选按钮的文本属性,或者在窗口中调整控件的位置。

在处理实际的Mac/iOS项目时,将把大多数时间花在中间的主要内容区中。在内容区中,可以更改项目设置,最重要的是,通过编写代码或者在Storyboard(故事板)中设计界面来创建应用。

左上方的栏中提供了几个有用的功能。从左边起,具有用于窗口管理的标准Mac Red/Yellow/Green(红/黄/绿)按钮。接下来,当涉及编译、生成以及在仿真器(Simulator)或设备上运行你的应用时,播放和停止按钮将实际地生成以及运行和停止。右边用于通知当前的信息,比如项目中有多少个警告或错误,以及生成状态。

最后,右上方的按钮组可以调整你查看的视图,以显示或隐藏导航窗格、检查器窗格、调试窗格(Debug Pane)或辅助编辑器,以及查看代码比较、源代码“查错”视图和日志。

 注意:查看两个文件

Assistant Editor(辅助编辑器)把内容区分成两半,以便可以同时查看两个文件。这是有益的,例如,当你可能在编写单元测试以及使单元测试通过的代码时,或者当你在故事板中创建用户界面并且打开了相应的视图控制器(View Controller)以连接动作(Action)和出口(Outlet)时。有关利用自定义界面开发应用的更多知识,建议阅读John Ray的图书Sams Teach Yourself iOS Application Development in 24 Hours(Sams Publishing出版)。
1.2.2 Xcode playground
Xcode的优秀的主要特性之一是playground。playground是一个便笺本,如果你愿意,在把代码添加到应用之前,可以使用它测试代码,以确保你从代码段接收到正确的结果。playground的这种功能如此强大,如果你的代码将给你提供期望的结果,那么就可以获得立即的反馈,而不必编译代码并在仿真器或设备上运行它。

可以随时创建新的playground,并且可以选择使之成为项目的一部分,或者只是作为一个独立的playground文件。由于我们已经位于一个打开的项目中,因此可以单击File→New→ File,然后在文件的Source(源)集(用于iOS或Mac)中选择playground,接着单击Next按钮。在Save As对话框中,命名playground文件(出于我们的目的,名称MyPlayground就很好),然后单击Create按钮。目前不用关心Group或Target;我们还没有生成应用,因此不用关心它们。

 注意:Mac或iOS playground

在从Mac区域或iOS区域创建playground时,文件结构中存在一些区别。创建一个Mac playground将会在文件的顶部添加import Cocoa语句,并且使Mac框架和模块可供使用。创建一个iOS playground将在文件的顶部添加import UIKit语句,并且使iOS框架和模块可供使用。初看上去,两种playground并没有什么区别。如果创建iOS playground,但是不想测试Mac应用代码,或者刚好相反,则只需创建一个期望类型的新playground即可。
注意,新的playground带有几行Swift代码,以便于你学习。在继续学习后面的内容之前,让我们先介绍其中一些基础知识。playground应该如下所示。

//: Playground - noun: a place where people can play
import UIKit
var str = "Hello, playground"

上面代码中的第一行是注释,它会被编译器忽略。可以使用注释给代码的某些部分加注解,使得人类能够轻松地读懂它们,也许是给其他同事(或者甚至是你自己)解释代码的这个特定部分是用于什么的。//(双正斜框)意指将把行中余下的内容视作注释。还可以注释整个代码区域或文本段落,它们可以在同一行或者多个连续的行上,只须利用//括住它们即可。Swift甚至允许在注释块内嵌套注释块,比如/ ... / ... / ... /。

上述代码中的余下部分执行一个简单的任务,它把字符串"Hello, playground"分配给变量str。即使代码没有直接把任何内容输出到控制台,playground默认也会在playground的结果窗格中显示“Hello, playground”,以显示变量以及你创建的任何后续变量或常量的内容。当你想测试逻辑、数学及其他操作时,这将很方便。

还值得指出的是:变量str前面带有关键字var。var关键字可以让Swift知道str是一个变量,可以更改其内容。要创建常量或者可变的变量,可以使用关键字let代替var。

TRYITYOURSELF

在playground中创建前几行Swift代码

此时,当你身处playground中时,试验前几行代码是有意义的,因此让我们在这里全部试验一下它们。

(1)在playground中,把以下代码输入到一个新行上。

let myNewValue = 40 + 2
(2)注意playground的右边显示“42”。输入如下代码行,以在句子里面插入值。

print("My new value is \(myNewValue).")
(3)要在控制台中查看输出结果,可以单击View菜单,然后单击Debug Area,再单击Show Debug Area。Debug Area在界面底部现在是可见的,并且你应该会看到print()语句的输出。

"My new value is 42."
祝贺!你已经编写了前几行Swift代码。

在上面的“TRY IT YOURSELF”示例中,在第(1)步中把值42赋予myNewValue。然后,在第(2)步中,使用称为字符串插值(string interpolation)的方法,把该值插入一个句子里,这是一种在输出内插入变量或常量的便捷方式。下一章将更详细地讨论字符串插值。print()语句把输出结果显示到控制台,这对于快速调试或者查看数据的内容很方便。

 注意:删除Xcode项目

如果你想要删除这个Xcode项目(或者你可能不再想要的任何Xcode项目),可以简单地在文件系统上删除包含文件夹。假如你把这个项目保存在~/Documents/TestApp中,那么只须从Documents目录中删除TestApp文件夹即可。
1.2.3 Swift REPL
Swift还具备一个称为REPL(Read-Eval-Print-Loop,读取-求值-输出-循环)的优秀特性。REPL是我们刚才体验的playground的一个基于命令行的交互式版本。REPL非常适合于快速测试,以确保代码按预期的那样工作,类似于利用playground所得到的结果,但它不会在项目中创建一个新文件,只能把这个临时性的REPL用于进入、测试代码和离开。至于是使用playground还是使用REPL,主要依赖于你更偏爱哪个工具。如果你已经在使用Terminal.app,或者一些其他的命令行实用程序,只打开REPL对你来说可能更容易。另一方面,如果你已经身处Xcode中,那么只创建一个playground并从那里开始可能更快速。

要访问REPL,只须输入以下代码。

$> xcrun swift
xcrun是由Xcode提供的一个命令行工具,用于运行或定位开发工具或属性。因此,上面的代码行用于告诉xcrun运行Swift REPL。当按Return键时,将会看到如下所示的内容(你的版本号可能有所不同)。

Welcome to Apple Swift version 2.0 (700.0.57 700.0.72). Type :help for assistance.
  1>

1>是Swift REPL提示符,可在此处开始输入Swift代码,每行一条指令,并且它会为你解释你的代码,与playground所做的非常像。让我们试试另一个编写代码的示例,这一次是在Swift REPL中进行。

TRYITYOURSELF

使用Swift REPL把两个字符串结合在一起

让我们在这里编写另一个包含一些Swift代码的示例;希望这个示例仍然不太难。如果你没有完全理解它,也不要担心;下一章将非常详细地介绍它。

(1)在Mac上打开Terminal.app。

(2)在Terminal中输入xcrun swift,然后按Return键。

(3)在1>提示符下,输入以下代码。

let firstHalf = "I’m writing Swift code,"
let secondHalf = "and I’m so excited!"
let combined = firstHalf + secondHalf

(4)注意每次按Return键时,Swift的REPL如何显示我们使用的常量或变量的名称、它的数据类型String(第2章将介绍数据类型)以及它的值。

(5)看看如何使用“+”运算符把两个字符串连接在一起。Swift足够智能,知道即使我们处理的是字母字符(不同于数字相加),“+”运算符也会把String实例相加起来。第3章将介绍关于运算符的更多知识。

你干得很棒!Swift REPL将在REPL会话期间把常量和变量一直保存在内存中。这意味着以后可以多次引用变量和常量,在实际的应用中编写代码之前,这将可以帮助你致力于快速、轻松地处理问题。完整的“TRY IT YOURSELF”示例应该如图1.5所示。

要退出Swift REPL,可以输入冒号(:)调用命令模式,然后输入q用于退出,并按Return键。这将返回常规的UNIX shell提示符。

时间: 2024-10-03 23:56:04

《Swift入门经典(第2版)》——1.2 起步的相关文章

《Swift入门经典(第2版)》——导读

前言 在Apple公司于2014年6月召开的年度全球开发者大会(World Wide Developer Conference,WWDC)上,Apple公司公布了一种名为Swift的新编程语言,该公司从2010年起就在开发这种语言.这是一个重大的公告.多年来,在开发大多数Mac和iOS应用时,人们主要选择的语言是Objective-C.可以明显感觉到人们对Swift编程语言的殷切期盼.Twitter上关于Swift的言论不绝于耳,人们纷纷购买标题中具有Swift的域名,并且在公告后24小时内,A

《Swift入门经典(第2版)》——第1章 Swift开发环境简介 1.1什么是Swift

第1章 Swift开发环境简介 在本章中你将学到: Swift是什么以及它来自于哪里: 怎样从Mac App Store安装Xcode 7: 怎样导航Xcode集成开发环境(Integrated Development Environment,IDE): 怎样使用playground(游乐场): 怎样使用Swift的REPL(Read-Eval-Print-Loop,读取-求值-输出-循环): 怎样编写你的第一个Swift应用. 自从2007年推出iPhone以来,Apple似乎不但点燃了基于消

《Swift入门经典(第2版)》——2.2 Swift中的变量

2.2 Swift中的变量 可以看到,由于应用具有并且必须具有动态性,只使用常量将无法实现复杂的应用.Swift提供了一种同样简单的方式,像声明常量那样声明变量,只是使用var导引符.顾名思义,变量可以改变,它们本质上是可变(mutable)的.这意味着无论何时使用"="运算符(称为赋值运算符(assignment operator)),都可以改变变量的值(第3章将讨论运算符). 当你知道数据可以并且将会改变时,变量将特别有用.例如,如果你正在构建一个计步器应用,你知道对于你或者你的应

《Swift入门经典(第2版)》——1.5 作业

1.5 作业 作业包含测验问题和练习,可以帮助你巩固对所学知识的理解.要尝试先解答所有的问题,然后再查看随后一节中的答案. 1.5.1 测验 1.可以使用什么命令打开Swift REPL? 2.使用playground编写Swift代码,把数字3和19相乘,并把值存储在一个名为result的常量中.这段代码是什么? 3.怎样退出Swift REPL? 4.运行Xcode 7的Mac OS X的最低版本是什么? 5.下面的Swift代码的输出将是什么? let age = 33 let outpu

《Swift入门经典(第2版)》——第2章 学习Swift的基本数据类型 2.1Swift中的常量

第2章 学习Swift的基本数据类型 在本章中你将学到: 了解常量与变量之间的区别: 怎样声明和使用常量与变量: Swift怎样使用类型推断,实现自动类型设置: Swift的常用数据类型: 怎样利用类型注释特别声明数据类型. 第1章介绍了设置Xcode和Swift REPL环境,并且展示了Xcode布局.我们还研究了Swift代码的一些简短示例,说明了怎样使用这些环境来帮助你编码,甚至测试你的代码.在代码中声明常量以及把不同的数据类型(比如数字42或字符串"Hello, playground&q

《Swift入门经典(第2版)》——1.4 问与答

1.4 问与答 问:我无须创建完整的Xcode项目就能拥有一个playground吗?答:绝对可以.Xcode把playground视作独立于任何项目的可解释文件. 问:我仍然在运行OS X Mountain Lion,那么我还能够使用Xcode吗?答:OS X Mountain Lion(版本10.8)可以运行Xcode,但是可以在Mountain Lion上运行的Xcode的最新版本是Xcode 5.x.OS X Mavericks 10.9.3是可以支持Xcode 6的最早版本,要运行Xc

《Swift入门经典(第2版)》——2.6 作业

2.6 作业 作业包含测验问题和练习,可以帮助你巩固对所学知识的理解.要尝试先解答所有的问题,然后再查看随后一节中的答案. 2.6.1 测验1.let与var之间的区别是什么? 2.在下面的代码中,Swift将推断数据类型是什么? var hasComment = false3.什么是无符号整数? 4.在下面的代码中,Swift将推断数据类型是什么? var customerAge = "25"5.在Swift中使用什么字符来连接字符串? 2.6.2 答案1.导引符let指示常量:导引

《Swift入门经典(第2版)》——1.3 小结

1.3 小结 第 1 章讲述了Swift编程语言的简短背景以及它构建于什么之上,还介绍了第一次打开Xcode环境时出现的内容,探讨了Xcode的一些布局,以及Swift REPL.你还创建了前几行Swift代码,并且看到了Xcode和REPL怎样给你提供关于代码正在做什么的即时反馈. 下一章将介绍变量和常量之间的区别,并且探讨Swift中一些固有的数据类型,比如String.Int.Bool.Character.Double和Float.

《Swift入门经典(第2版)》——2.4 小结

2.4 小结 本章介绍了关于Swift中基本数据类型的许多知识,包括Int.Double.Bool和String.另外,还讨论了每种数据类型存储的是什么类型的数据,怎样利用正确的数据初始化它们,甚至怎样通过在Xcode中按住Command键并单击数据类型的关键字,检查数据类型属性和方法的完整列表.甚至还介绍了一些更深入的主题,比如类型转换和字符串插值. 本章还讲述了Swift怎样基于赋予常量或变量的值使用类型推断来推理类型,以及在代码中具有常量和变量意味着什么. 下一章将讨论运算符,比如+.−.