学习Swift和iOS开发第2部分:Swift简介
在上一篇文章中,我们学习了如何安装Xcode。 在本文中,我们将使用Xcode深入介绍Swift的一些基础知识。
Swift是使用现代方法构建的通用编程语言,用于安全性,性能和软件设计模式。
如果您不具有计算机科学或编程背景,那么您可能会想:“那太好了。 但是这是什么意思? Trust”当我们说这意味着您的编码学习生活比以前容易得多时,请相信我们。
Swift是一种非常优秀的第一门编程语言,因为它的语法通常很容易理解。 在线上还有大量资源(例如教程(如本教程!),YouTube视频,博客,论坛等)可以帮助您学习Swift。
本章是后续各章的前提。 它主要供您参考和参考。 稍后我们将详细介绍。 让我们开始吧!
启动Xcode,我们将在一个称为Playground的地方工作。 只需打开Xcode并选择“游乐场入门”。 然后选择空白。
或从“文件”>“新建”>“游乐场”
命名并保存您的Playground,然后您应该会看到以下内容:
那么,这是什么游乐场? 游乐场是一个互动的工作环境。 我们可以编写代码,并立即查看我们的代码结果。 这使其成为学习和实验的好工具。 您可以在本文其余部分中看到的代码可以添加到您的Playground中以进行后续操作!
变数
每种编程语言都使用变量。 它们就像一个容器,可让您存储许多不同类型的数据。
要声明变量,必须使用关键字var
:
var讯息:String =“ Hello,World!”
我们刚刚写的内容告诉我们的计算机,我们想要创建一个容器(变量),其名称message
为String
类型,其中包含文本“ Hello,World!”。
Swift的惊人之处在于它包含了一个名为Type Inference的功能。 这意味着Swift可以分析变量内的数据(文本,数字,真/假等)并推断其类型。
要对此进行测试,只需在声明变量message
之后删除String
即可:
var message =“你好,世界!” //类型推断的字符串
正如您在上面看到的,我们从未明确告诉我们的计算机我们希望variable
为String
但是由于Hello, World!
周围的引号Hello, World!
,Swift可以推断出它的类型。
变量之所以称为变量,是因为它们是可变的,可以更改其值。
例如,如果我们想更改message
变量的值,则需要编写变量名并按如下方式更改其值:
var message =“你好,世界!”
message =“你好,斯威夫特!”
现在message
等于“你好,斯威夫特!”。
常数
有时,有些价值是您永远都不想改变的。 例如您的生日或您的家乡的名称。
在Swift中,我们将此类型的值称为constant
。
要声明一个常数,必须使用关键字let
。
如果在上面的示例中将关键字var
更改为let
,则会出现错误,因为我们无法修改常量。
让问候=“你好,世界!”
问候=“你好,斯威夫特!” //错误
串
到目前为止,在上面的代码中,我们仅引用了String
类型的值。 String
可用于保存文本数据。
字符串在如何修改,转换甚至保存许多不同类型的值方面也很强大。
例如,我们可以使用String串联使用+
运算符将几个String
值组合在一起。
让专辑=“没关系”
让艺术家=“涅磐”
让评论=“很棒!🙌”
let description =“ +” +评论//描述的专辑“ +专辑+” =“涅rv乐队的专辑Nevermind太棒了!🙌”
我们可以做的另一件事是使用String Interpolation封装其他变量,并在需要时将它们传递给String
值。
let Birthday =“ 1992年5月15日”
let bio =“我的生日是\(生日)。”
// bio =“我的生日是1992年5月15日。”
您甚至可以传递非String
类型的值,而Swift可以转换它们。
整数
关键字Int
是Integer的缩写。 在数学上,整数最基本地定义为整数。
我们可以在变量或常量中使用Int
值:
var age:Int = 24 //明确声明Int
var salal = 70000 //类型推断的Int
生年= 1992
let daysInAYear = 365
布尔
关键字Bool
是Bool
值的缩写。 布尔值仅是true和false值。 与上述所有类型一样,您可以显式声明Bool
类型的变量,或者让Swift通过将变量的值设置为true
或false
来推断其类型。
var isFinishedLoading = true //类型推断
var dataLoaded:Bool = false //明确
双/浮
Double
是一个数字值,类似于其下面的类型Float
。 两者之间的区别在于您的精确度。
Double
是一个64位浮点数,可以精确到15个十进制数字。
Float
是32位浮点数,可以精确到小数点后6位。
如您所见, Double
比Float
更精确。
var intersectVersion = 2.0 //类型推断的Double
注意事项:Swift默认将类型推导十进制值作为Double
而不是Float
。 要声明类型为Float
的变量,请明确声明:
var intersectVersion:浮点数= 2.0
大多数时候,您将在Swift(以及本系列)中使用Double
值。 建议使用Double
精度数字类型。
集合类型
在Swift中,有三种存储值集合的方法Set
, Array
和Dictionary
。 就本系列而言,我们将仅使用和学习Swift中的Array
和Dictionary
。
数组
数组是按索引组织的有序值的集合。 索引是对象在数组内部的位置。 在Swift中使用零索引,这意味着数组中的第一项实际上的索引为0。从那时起,数字增加一。
定义数组
数组总是写在方括号内。 每个值都用逗号分隔。
var unoCards:[String] = [“ Skip”,“ Wild”,“ Wild + Draw Four”]
//明确声明的Stringsvar unoCards数组= [“ Skip”,“ Wild”,“ Wild + Draw Four”]
//类型推断为[String]
数组可以包含上述一种类型的值,但是您也可以在数组中包含多种类型。
要从数组中获取单个项目的值,我们需要执行以下操作:
print(unoCards [0])//打印“跳过”
使用print
,我们可以打印unoCards
数组中的第一项(索引0)的unoCards
-“ Skip”。
修改阵列
我将创建一个包含购物清单的数组。
var groceryList = [“牛奶”,“鸡蛋”,“奶酪”]
要将项目添加到列表中,我们只需在Swift中使用.append()
函数即可:
var groceryList = [“牛奶”,“鸡蛋”,“奶酪”]
groceryList.append(“棉花糖”)// groceryList = [“牛奶”,“鸡蛋”,“奶酪”,“棉花糖”]
这会将值“棉花糖”添加到groceryList
数组的末尾。
要将多个项目添加到数组中,我们可以在Swift中使用.append(contentsOf:)
函数:
var groceryList = [“牛奶”,“鸡蛋”,“奶酪”]
groceryList.append(“棉花糖”)groceryList.append(contents:[“ Oreos”,“ Quinoa”])// groceryList = [“牛奶”,“鸡蛋”,“奶酪”,“棉花糖”,“ Oreos”,“藜麦”]
要在数组的某个点插入项目,请在Swift中使用.insert(_:at:)
函数:
var groceryList = [“牛奶”,“鸡蛋”,“奶酪”]
groceryList.append(“棉花糖”)groceryList.append(contentsOf:[“ Oreos”,“ Quinoa”])groceryList.insert(“ Potatoes”,at:2)// groceryList = [“牛奶”,“鸡蛋”,“土豆”,“奶酪”,“棉花糖”,“ Oreos”,“奎奴亚藜”]
字典
Dictionary
使您可以成对存储包含键和值的无序数据。 就像口语/书面语言的字典一样,每个单词都有一个定义。 在Swift Dictionary
,将键=单词和值=定义进行比较。 在Dictionary
所有键都是相同的类型,并且所有值都是相同的类型。
看一下我在下面声明的字典:
var screenSizeInInches = [“ iPhone 7”:4.7,“ iPhone 7 Plus”:5.5,“ iPad Pro”:12.9]
在上面的词典中,这是以下模式: [key : value, key : value]
要检索给定键的值,请使用下标语法,如下所示:
print(screenSizeInInches [“ iPhone 7”])//打印4.7
请注意,我是如何调用Dictionary
,然后在方括号下标中包含了密钥? 将其放入print
功能后,它将打印该值。 这将返回一个可选值,因为不能保证所请求的键具有值。
修改字典
现在,我想将iPad Air 2添加到我的一系列屏幕尺寸中。 为此,我们需要键入数组的名称,将方括号添加为下标,并在方括号内添加一个值以添加键。 要添加值,我们添加等号(=)并设置所需的值。
screenSizeInInches [“ iPad Air 2”] = 9.7 // screenSizeInInches = [“ iPhone 7”:4.7,“ iPhone 7 Plus”:5.5,“ iPad Pro”:12.9,“ iPad Air 2”:9.7]
控制流
循环
有时您可能想遍历数据集合并执行特定任务或在满足特定条件时执行某些操作。
Swift中有3种主要的循环类型: while
, repeat-while
和for-in
。
while
循环
我认为,这是最容易理解的循环。 它本质上说,虽然某些事情是对的,但它会执行一段代码,直到它为假。 然后它停止循环。
这是一个例子:
var num = 0
而num <8 {
num + = 1
打印(数字)
} //这将打印出1,2,3,4,5,6,7,8
在上面的代码中,条件的计算结果is num less than 8
。 如果结果为true,则执行代码块。 在该代码块中,我们将num
变量加1,然后打印出新的增值。 这一直持续到num
值增加到9为止,此时条件的评估结果为false,并且不再执行代码块。
repeat-while
循环
repeat-while
循环的操作与常规while
循环非常相似,只是有一个关键的区别。
在repeat-while
循环中,首先执行要重复的代码,然后检查条件以查看循环是否继续。
在while
循环中,首先检查条件,然后确定条件是否运行。
这是一个例子:
var大小= 10
重复{size = size + 1},而size <15
该循环将通过将size的值加1直到15来继续增加大小。这里要记住的是,条件是在代码循环后检查的。
在检查条件是否满足之前,有很多机会需要运行代码。 repeat-while
循环是实现它的方法。
for-in
循环
循环的另一种类型是for-in
。 它用于遍历数据集合并对该集合中的每个项目执行操作。
例如:
var unoCards = [“跳过”,“通配”,“通配+抽四”]]
打印(unoCard)
}
上面的代码将遍历unoCards
数组中的每个项目,并打印每个项目的名称,直到到达末尾为止。 然后,我们的循环终止。
您还可以遍历一系列值。 在Swift中,范围由两个或三个点表示。
1…5是从1到5的数字的范围。三个点表示值分别为1、2、3、4和5。
1 .. <5是从1到4的数字的非包含范围。两个点和小于号表示所考虑的值将是1、2、3和4。
有条件的
If
陈述
有时您可能想创建仅在某些条件下才能执行的条件代码。 这就是if
语句变得非常有用的地方。
基本上,它们像这样工作:如果x为true,则执行y。
例如:
let carModel =“ Delorean”
如果carModel ==“ Delorean” {print(“伟大的斯科特!”)}} if if carModel ==“ Geo Metro” {print(“开车,对吗?”)} else {print(“如果有车轮和驱动器,这是一辆车!“)}
在上面的声明中,我们已经说过,如果carModel
等于“ Delorean”,那么它应该向控制台打印一条消息。 当我们使用==
我们正在创建一个相等性检查,因此我们说的是变量carModel
的值是否与“ Delorean”相同,然后求值为true并执行代码块。 我们可以使用else if
来进行其他检查。
如果它等于“ Geo Metro”,则应打印特定于该型号的消息。 最后,如果它既不是Delorean也不是Geo Metro(谢天谢地),那么我们应该打印一条通用消息。
if
将if
语句与else if
or else
结合使用,则可能会有些混乱。
如果您要满足的条件不只几个,那么下一节将为您做些什么。
切换语句
Swift中的switch
语句对于具有多种情况的场景非常有用。
例如:
var unoCardValue =“ Skip”开关unoCardValue {case“ Skip”:
print(“ Skip”)//将显示“ Skip”
案例“抽奖”:
打印(“四幅画”)
情况“反向”:
打印(“反向”)
案例“野生”:
打印(“野生”)
默认:
打印(“未选择卡!”)
}
在上面的示例中,我们将unoCardValue
的值设置为“ Skip”。 我们创建了一个switch语句,并将值设置为check等于我们的变量。
现在,当我们的值更改时,它将被传递到我们的switch语句中,并且如果它满足我们的5个条件之一,它将运行针对该情况编写的代码。
创建switch
语句时,您必须详尽无遗,并为每种可能的情况编写案例。 如果不需要或不想这样做,可以在switch语句的底部声明一个default
案例,以处理不是您编写的案例之一的任何案例。 由于我们要检查的唯一值是一个可以为任意值的String
,因此我们需要声明一个default
情况,因为定义的情况之外还有无穷的可能性。
功能
在Swift中,我们可以编写类似于一组指令的函数,这些指令可以编写一次并在多个地方使用。
基本功能
要创建最基本的功能,我们需要使用关键字func
并为其指定一个描述性名称来描述其功能。
例如:
func printName(){
打印(“ Devslopes”)
} printName()//会调用该函数,并将“ Devslopes”打印到控制台。
在上面的示例中,我们使用关键字func
声明了一个函数,该函数的名称为printName
。 名称后必须加括号()
。 然后函数被调用时所执行的操作被括在花括号{ }
。 但是,仅仅因为您已经编写了一个函数,并不意味着它可以执行任何操作。 我们必须call
上面代码片段中所示的函数。
带参数的功能
上面的功能非常强大,但是,如果我们要打印Devslopes以外的名称怎么办?
我们可以将参数传递给函数。 这些也称为参数。 然后可以在函数内部使用这些参数。 格式如下:
func functionName(argumentName:argumentsType){
//要执行的代码可以使用argumentsName作为变量。
}
像这样:
func printName(name:String){
print(“你好,\(名称)!”)
}
现在,当我们调用函数时,我们可以传入带有参数name
的String
值,该参数name
包含我们想要的任何名称! 然后,当您调用该函数时,将传入您自己的字符串,它将使用提供的参数执行代码。
printName(“ JonnyB”)
//这会输出“你好,JonnyB!”
具有参数和返回值的函数
有时,您想执行一个函数并将值返回给某种变量。 为此,您只需添加要返回的返回类型,然后让函数返回相关值即可。 返回值的语法如下: -> ReturnType
例如-> String
或-> Int
。
这是一个例子。 让我们创建一个函数,该函数将名字和姓氏作为参数,并将其组合为单个String,然后返回该值:
func buildName(firstName:String,lastName:String)-> String {return“ \(firstName)\(lastName)” //返回上面的变量“ Caleb Stultz”。} var fullName = buildName(firstName:“ Caleb”, lastName:“ Stultz”)
上面的函数需要两个参数firstName
和lastName
。 传入这些值时,我们将String
返回到变量fullName
并将其值设置为全名。
包起来
本章是Swift 3编程语言的过渡部分。 希望您只要简要看一下就能知道它有多棒。 如果您是编程的新手,请不要担心。 如果这令人困惑或不知所措,那么您并不孤单。 但是,此时此刻最重要的是,您要坚持到底,记住真正的每个人都可以学习编码,并且您需要在这一点上与自己竞争才能变得更好。
在下一篇文章中,我们将对变量进行更深入的研究。 在那里见!