Swift开发入门贴(持续更新)

Swift开发入门

绪论:

了解一下什么是iOS

img

  • iOS 是由苹果公司开发的移动操作系统,最初发布于 2007 年。该操作系统是基于 Mac OS X 操作系统开发的,并专门设计适用于 iPhone、iPad 和 iPod Touch 等设备。

  • iOS 操作系统的历史可以追溯到 2005 年,当时苹果公司开始着手开发一款名为“Project Purple”的移动设备,该设备最终演变成了第一代 iPhone,并搭载了 iOS 操作系统。自那时起,iOS 操作系统在不断地发展和完善,每年都会推出新版本。

  • 目前最新的版本是iOS 16

关于Xcode

img

  • Xcode 是苹果公司为开发 macOS、iOS、iPadOS、watchOS 和 tvOS 应用程序所推出的集成开发环境(IDE)。它包含了一系列的工具,如代码编辑器、调试器、可视化设计工具等,可以帮助开发者创建出高质量、高效率的应用程序。

  • Xcode 运行在 macOS 操作系统上,可以使用 Objective-C 和 Swift 语言进行开发。其中,Objective-C 是一种经典的面向对象编程语言,而 Swift 是苹果公司于 2014 年发布的新型编程语言,它结合了 Objective-C 的强大功能和现代编程语言的特性,成为了 iOS 开发的主要编程语言。

  • Xcode 14 是目前最新版本的 Xcode,它为开发者带来了更加智能、更加高效的开发体验。其中,新增了许多实用的工具和功能,如 Xcode Cloud、SwiftUI 3、Metal 3、TestFlight 等,可以大大提高开发者的开发效率和工作质量。

下载链接:‎Mac App Store 上的“Xcode”

关于Swift

img

Swift 是苹果公司于 2014 年推出的一种新型支持多编程范式和编译式的编程语言,,它结合了 Objective-C 的强大功能和现代编程语言的特性,成为撰写macOS、iOS、iPadOS、watchOS和tvOS的主要语言。Swift 具有以下特点:

  • 简洁易读:Swift 的语法简洁易读,减少了代码量,提高了代码的可读性。

  • 安全可靠:Swift 支持类型推断,可以在编译时检测类型不匹配的错误。此外,Swift 还具有对空值的处理机制,可以有效避免空指针异常。

  • 快速高效:Swift 借助于 LLVM 编译器,具有快速高效的运行速度。

Playground和Swiftplayground介绍

学习语法阶段的话我们就可以使用playground来进行语法方面的学习,如果是需要创建一个App或者其他的工程的话则需要创建project工程。

开始学习Swift学习之旅

当我们下载好Xcode后之后可以打开它,大家可以看见下面两个区域


区域1:是我们创建工程、打开工程、去Github上clone工程的一个工程构建区
区域2:是我们打开过的工程的历史记录便于我们下次直接访问之前的工程

由于我们现在是属于语法学习阶段为此我们创建一个playground文件来学习Swift语法



之后点击next给我们的文件命名和选择保存区域即可

从Hello World开始

注释

单行注释两个反斜杠开头://

多行注释: /* */

注释支持嵌套: /*多行注释 //另一个注释 */
在Xcode中注释的快捷键是command + /
注释的作用是当我们写代码的时候给某串代码写上注释,当我们隔了很久再看的时候我们就能很清晰地知道这串代码的功能和作用;同时当我们将代码发给别人的时候如果有注释的话那么别人就能够更好地读懂你的代码。

如果一个工程里面没有注释那么对于观看你的工程文件的人将是一件痛苦的事情!

截屏2023-03-27 19.41.18

常量和变量

常量变量介绍

  • Swift根据不同的需要可以采用常量和变量

  • 常量用关键字let声明,变量用关键字var声明

  • 常量和变量在使用前都必须声明,声明的目的是为了告诉编译器应分配多大的空间。

  • 常量和变量的区别:常量一旦设定,在程序运行时就无法改变其值,而变量的值可以随意更改。


我们可以看到如果我们尝试去修改name的时候我们的程序将会报错,我们修改a的值的时候程序是可以正常运行的。这个就是一个常量和变量的区别。

关于常量和变量的命名规则:

  • 1、不能以数字开头

  • 2、不能含有空格

  • 3、不能含有数学符号,箭头,保留的Unicode码位。

  • 4、不能是Swift中的关键字(if、class、import、return……)

注意Swift是区分大小写的,Myname和myname被认为是两个不同的变量

截屏2023-03-27 19.51.59

截屏2023-03-27 19.53.17
我们可以看见MynamemyName都能正常输出

一些特殊的合法例子(一般不推荐大家那么命名)


let π = 3.14159

let 一百=100

let 🎲 = 6

let コナンです = “柯南”

一些其他规范

  • 通常我们采用驼峰式命名法,还有下划线命名法(这两个命名法的选择看个人喜好)

  • 驼峰式命名法是一种常用的命名规范,也叫小驼峰式命名法。它的原则是将单词的首字母大写,并去掉单词之间的空格或其他分隔符。例如,将“user name”命名为“userName”,将“first name”命名为“firstName”等。这种命名规范在编程中被广泛使用,可以使代码更加易读且符合语言习惯。

  • 对于类或结构体的命名,第一个单词同样采用大写

有了常量和变量之后,就可以储存一些计算结果,有利于在后续的程序中使用。

运算符

  • 运算符是检查、改变、合并值的特殊符号或短语

  • 常见积累运算符:赋值运算符、算术运算符、比较运算符、逻辑运算符、区间运算符、位运算符、空合运算符、组合赋值运算符

算术运算符

Swift中所有数值类型都支持了基本的四则算术运算符;对于整数类型还有求余运算,也叫做模运算。

Note:整数之间做除法只能是整除,可以看见我们上面的a/b答案是0,正确的来说应该是0.5才对。下面我先放一个修改后的代码,在之后的数据类型会将这个方面的知识。
截屏2023-03-27 20.01.48

比较运算符

上面算术运算符返回的是两个值之间经过计算后 的结果,而比较运算符返回的是判断的结果,这个结果只有一个true或者false。

逻辑元素符

逻辑运算符的操作对象是true或者false

Swift支持三个标准逻辑运算

1、逻辑非 (!a):

对布尔值进行取反,使得true变false,false变true

2、逻辑与(a && b):

只要a和b的值都为true时,整个表达式的值才会是true。只要任意一个值为false,整个表达式的值就为false。

3、逻辑或(a || b):

两个逻辑表达式的其中一个为true,整个表达式就为true。

我们对于上面的比较运算符中的内容进行一个逻辑运算符的计算之后,大家可以看一下控制台上打印出来的结果是否和比较运算符中的一样

区间运算符

Swift提供了两种表达一个区间的值的区间运算符

闭区间运算符(a…b):从a到b(包含了a和b)的区间

半开区间运算符(a…<b):从a到b(包含a不包含b)的区间

区间运算符主要用于for循环中

组合赋值运算符

Swift也提供了把其他运算符和赋值运算符组合的组合赋值运算符

组合加运算是其中一个例子 (放+=的例子)

类似滴,还有-=、*=、/=、%=等运算符。

截屏2023-03-27 20.12.37

我们可以看到a = a + 1a += 1的效果是一样的 其实a += 1就是将a = a + 1给组合起来的

三目运算符

三目运算符: a ? b : c

含义:

当a为true时,表达式的结果为b

当a为false时,表达式的结果为c


我们可以看到a > b这个结果是false,所以我们输出:后面的b

运算符的优先级

在一个表达式中可能包含多个由于不同运算符连接起来、具有不同数据类型的数据对象;由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。

通常的计算顺序(由高到低)

1、算术运算

2、比较运算

3、逻辑运算(逻辑非 > 逻辑与 > 逻辑或)

4、赋值运算

为了一个复杂表达式更容易读懂,在合适的地方使用括号来明确优先级是很有效的。

截屏2023-03-27 20.18.22

数据类型

数据类型的声明

Swift是一门类型安全(Type Safe)的语言,这要求我们在声明常量或者变量的同时,确定其数据类型。

常见的数据类型有下面四种
截屏2023-04-03 16.13.03

String类型要求我们的字符需要用到英文的引号引起来,它的值是一系列的字符。
Double类型的值是小数。
Int类型的值是整数。
Bool类型的值只有两个true或者false

:warning::类型一旦确定下来后面是无法更改的

Swift自动类型推断(Type Inference)

我们可以看到前面我们声明的一些常量和变量的时候并没有确定数据类型,程序也是可以跑的这是为什么呢:thinking:
如果我们没有显式指定数据类型,Swift会使用类型推断(Type Inference)来选择合适的类型。具体如下图所示

我们在控制台打印出我们声明的常量和变量的数据类型,可以看到和我们上面显式指定的数据类型的类型是一样的。这里可以看见Swift的强大性和便利性。

类型推断是需要进行赋值的,如果我们声明的常量或者变量没有给定初始值,那么这个时候我们需要确定我们的数据类型了,具体如下:

let cityName: String
let pi: Double
var playerScore: Int
var gameOver: Bool 

这个时候它们的值我们可以稍后进行设定,同样一旦确定类型就不能更改

类型检查(Type Checks)

在编译代码的时候,Swift会进行类型检查,并把不匹配的数据类型标记为错误。这可以在你开发的时候尽早发现并修复错误.可以看看下面的例子,我们将一个Int类型的变量varA,赋予了一个String类型的值,这个时候我们运行我们的代码的时候,控制台就会告诉我们错误说“我们不能将一个String类型的值赋值给一个Int类型的常量或变量”

var varA = 42
varA = "It's False"
print(varA)

不同的数据类型之间是不能进行运算的

这个点我们在上面的一些例子中也有讲到。我们来看两个例子,这里声明了两个不同类型的变量varAvarB我们将它们进行一个加法运算看看控制台会给我返回什么结果
我们在Playground中输入并运行这段代码:

var varA = 42
var varB = 13.2
print(varA + varB)

这里我们可以看见两个报错,上面的吧报错是说我们不能将Int类型的和Double类型的值进行相加;后面的一个报错是说这串代码中我们如果要正确运用这个+运算符的话需要统一两边的数据类型,要么两边都是Int类型,要么两边都是Double类型,或者其他对应相同的类型。

类型转换

如何解决上面代码中的报错呢,这里有两个解决方案.
第一个将我们varA的数据类型转换为Double,代码如下所示:

var varA:Double = 42
var varB = 13.2
print(varA + varB)

第一个将我们在运算的时候用一个Double构造器将varA的数据类型转换为Double,代码如下所示:

var varA = 42
var varB = 13.2
print(Double(varA) + varB)

这里我们要注意一个类型转换的时候值的损失,IntDouble是没有损失的,DoubleInt是有值的损失的

字面量

但是直接用数字表示的整型数据(字面量)可以与浮点量运算
运行下面代码,我们可以得到如下截图中的结果

var varA = 42
var varB = 13.2
var varC = 42 + 13.2
print(varC)

——内容来源于移动应用创新赛分享

2 个赞