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

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

本节书摘来自异步社区《Swift入门经典(第2版)》一书中的第1章,第1.2节,作者:【美】BJ Miller(BJ 米勒)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

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按钮。

screenshot

screenshot

接下来,将要求命名项目。选择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,包标识符就需要是唯一的。

screenshot

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

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

screenshot

图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。

screenshot

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代码。

screenshot

在上面的“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中进行。

screenshot

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章将介绍关于运算符的更多知识。

screenshot

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

screenshot

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

相关文章
|
8月前
|
数据采集 人工智能 安全
别再用ChatGPT群发祝福了!手把手教你“喂”出一个懂人情的AI,连马术梗都能接住
本文揭秘春节祝福AI背后的数据构建逻辑:不靠大模型堆参数,而用“关系感知”六维框架(称呼/关系/细节/场合/风格/篇幅)定义人情分寸;通过人工精写种子数据、模型辅助繁殖(400→3107条)、结构化提示词模板,让AI写出有记忆点的专属祝福。技术是导盲犬,帮人打捞真心。
584 3
别再用ChatGPT群发祝福了!手把手教你“喂”出一个懂人情的AI,连马术梗都能接住
|
存储 SQL 大数据
告别 Count Distinct 慢查询:StarRocks 高效去重全攻略
在大数据分析中,去重计算(如 Count Distinct)因高计算开销常成为性能瓶颈,尤其在高基数和高并发场景下更为明显。本文以 StarRocks 为分析平台,深入探讨多种去重优化策略,包括使用函数、数据类型转换(如 String 转 Int)、高效数据结构(如 Bitmap 和 HLL),以及物化视图的预计算方案。通过实际案例分析,对比不同方法在性能、精度和易用性方面的优劣,帮助用户在不同业务场景下选择最合适的优化手段。此外,文章还详细解析了如何结合 SQL 查询构建物化视图,以提升去重计算效率,并讨论了精确与近似去重的适用场景。最终目标是为复杂数据分析提供高效、灵活的解决方案。
|
缓存 监控 安全
如何制作网站?网站制作步骤:
‌制作网站的核心步骤:明确核心内容、注册网址域名与租用服务器、页面风格确定、网站制作、测试优化及维护管理。
2341 73
|
存储 关系型数据库 MySQL
网站突然崩了,此站点遇到了致命错误!
当WordPress网站出现“此站点遇到了致命错误”时,可通过两种方法快速恢复:一是重装WordPress系统,删除配置文件并清理数据库后重新安装;二是通过FTP备份网站文件,并使用phpMyAdmin导出数据库,确保数据安全并便于迁移或恢复。
591 5
|
SQL 关系型数据库 MySQL
如何快速在表级别做同构或者异构数据库之间的数据迁移/备份
【8月更文挑战第17天】本文介绍在同构与异构数据库间快速迁移/备份表级数据的方法。同构迁移可利用数据库自带工具(如MySQL的`mysqldump`)或管理软件(如phpMyAdmin);异构迁移则推荐使用ETL工具(如Pentaho Data Integration)或数据库复制工具(如SymmetricDS),亦可通过编程方式实现。实施前需测试以确保数据完整准确,并注意处理兼容性问题。
911 4
|
人工智能 自然语言处理 搜索推荐
生成式引擎优化将成为律师事务所营销大趋势
随着生成式引擎优化的出现,数字营销正在经历一场翻天覆地的变化,律师事务所必须适应新的流量获取方式,其中人工智能生成的内容将发挥核心作用。
1367 2
|
测试技术 数据安全/隐私保护 Python
刷视频脚本,抖音快手小红书,自动看广告刷视频【python】
这个代码示例展示了如何使用Selenium和PyAutoGUI模拟视频观看行为,包括登录、观看视频
|
机器学习/深度学习 人工智能 自然语言处理
什么是智能搜索
智能搜索融合了人工智能和大数据技术,提供高效的语义理解、多模态数据处理及个性化推荐。它不仅支持传统关键词匹配,还结合NLP、机器学习等先进技术,提升信息检索的精准度与多样性。适用于电商、内容平台、多媒体及企业内部知识库等多种场景,显著优化用户体验和业务效率。
2300 2
|
人工智能 自然语言处理 算法
真的要让AGI在2025年降临吗?一场技术狂潮下的冷静思考
近年来,关于通用人工智能(AGI)在2025-2026年实现的言论层出不穷,引发业界热烈讨论与公众期待。尽管AI技术取得显著进展,如GPT系列模型,但距离真正AGI仍有差距。技术突破需时间积累,且面临多步规划、长时记忆等挑战。此外,部分企业夸大宣传误导公众,AGI还涉及伦理风险。因此,我们应保持理性态度,正视技术挑战,推动规范化发展,并鼓励参与相关培训提升竞争力。
|
JavaScript Java C#
【Typora-markdown语言】使用说明【指南】
Typora-markdown语言的使用说明和常见用法,好用的做笔记的工具软件及使用方法指南。目录 一、标题 二、段落 1、换行 2、分割线 三、文字显示 1、字体 2、上下标 四、列表 1、无序列表 2、无序列表 3、任务列表 五、区块显示 六、代码显示 1、行内代码 2、代码块 七、链接 八、脚注 九、图片插入 十、表格 十一、表情符号 语法: #(一级标题)##(二级标题)###(三级标题)。。。快捷键: Ctrl+数字1~6可以快速将选中的文本调成对
822 9