在Swift From Scratch的第一篇文章中,您了解了Xcode游乐场,并编写了Swift的第一行。 在本文中,我们将通过探索变量和类型来开始学习Swift编程语言的基础。 我们还将仔细研究常量,以及为什么鼓励您尽可能多地使用它们。
在本系列的下一部分中,我们将利用Xcode游乐场来学习Swift编程语言的基础知识。 正如我们在上一篇文章中看到的那样 ,游乐场是教授和学习Swift的理想选择。
首先,为本教程创建一个新的操场。 我鼓励您跟随! 使用语言是学习其语法和理解其概念的好方法。
从Xcode的“ 文件”菜单中选择“ 新建”>“游乐场...” ,启动Xcode 8并创建一个新的游乐场。 输入操场的名称,将Platform设置为iOS ,然后单击Next 。 告诉Xcode您想在哪里保存游乐场并点击Create 。
清除操场上的东西,以便我们从头开始。 我们在上一教程中已经使用了变量,但是现在让我们仔细看一下细节,以更好地了解Swift在幕后所做的事情。
1.变量
声明变量
在Swift中,我们使用var
关键字声明一个变量。 虽然这与在其他编程语言中声明变量的方式类似,但我强烈建议您在Swift中使用var
关键字时不要考虑其他编程语言。 有一些重要的区别。
var
关键字是在Swift中声明变量的唯一方法。 var
关键字最常见,最简洁的用法是声明变量并为其分配值。
var street = "5th Avenue"
请记住,我们不要以分号结尾这一行代码。 虽然在Swift中分号是可选的,但最佳实践是不要使用分号(如果不需要)。
您可能还注意到,在声明变量street
时,我们没有指定类型。 这将我们带到Swift的主要功能之一, 类型推断 。
类型推断
上面的语句声明了一个可变street
并为其分配了值5th Avenue
。 如果您不熟悉Swift,或者不熟悉JavaScript或PHP,那么您可能会认为Swift是一种无类型或松散类型的语言,但事实并非如此。 让我重申一下,Swift是一种强类型语言。 类型安全性是该语言的基石之一。
我们才刚刚起步,Swift已经向我们展示了它的魔力。 即使上面的声明没有明确指定类型,变量street
的类型仍然是String
。 这是Swift的类型推断。 我们分配给street
的值是一个字符串。 Swift足够聪明地看到了这一点,并隐式地将street
类型设置为String
。
以下语句给我们相同的结果。 不同之处在于我们显式设置了变量的类型。 该陈述从字面上说是street
类型为 String
。
var street: String = "5th Avenue"
Swift要求您显式或隐式设置变量和常量的类型。 如果不这样做,Swift会抛出错误来抱怨。 将以下行添加到您的游乐场,以了解我的意思。
var number
该语句在JavaScript或PHP中将完全有效。 但是,在Swift中,它是无效的。 原因很简单。 即使我们使用var
关键字声明变量,我们也没有指定变量的类型。 Swift无法推断类型,因为我们没有为变量分配值。 如果单击错误,Xcode会告诉您此语句出了什么问题。
通过执行以下两项操作之一,我们可以轻松解决此问题。 我们可以像之前一样为变量分配一个值,也可以为变量number
显式指定类型。 当我们显式设置number
类型时,错误消失了。 下面的代码行显示该number
为String
类型。
var number: String
改变类型
正如您在下面看到的,为street
和number
分配新值很简单,也就不足为奇了。
var street: String = "5th Avenue"
var number: String
street = "Main Street"
number = "10"
将数字10
分配给number
变量会更容易吗? 无需将街道号码存储为字符串。 让我们看看如果这样做会发生什么。
var street: String = "5th Avenue"
var number: String
street = "Main Street"
number = 10
如果我们给number
分配一个整数,Xcode会向我们抛出另一个错误。 错误消息是明确的。 我们不能将Int
类型的值分配给String
类型的变量。 在松散类型的语言中,这不是问题,但是在Swift中。
Swift是一种强类型语言,其中每个变量都有特定的类型,并且该类型不能更改。 再次阅读此句子以使其沉入,因为这是Swift中的重要概念。
为了消除错误,我们需要将number
变量声明为Int
。 请看下面的更新示例。
var street: String = "5th Avenue"
var number: Int
street = "Main Street"
number = 10
摘要
请记住以下几点,这一点很重要。 您可以使用var
关键字声明变量,而无需显式声明变量的类型。 但是,请记住,每个变量(和常量)在Swift中都有一个类型。 如果Swift无法推断出类型,那么它会抱怨。 每个变量都有一个类型,并且该类型不能更改。
2.常数
常量在键入方面类似于变量。 唯一的区别是常量的值一旦具有值就无法更改。 常量的值是……常量。
声明常量
要声明常量,请使用let
关键字。 看下面的示例,在该示例中,我们将street
声明为常量而不是变量。
let street: String = "5th Avenue"
var number: Int
street = "Main Street"
number = 10
如果仅更新第一行,用let
替换var
,则Xcode出于明显的原因会引发错误。 在Swift中,不允许尝试更改常量的值。 删除或注释掉我们试图为street
分配新值的行,以消除错误。
let street: String = "5th Avenue"
var number: Int
// street = "Main Street"
number = 10
使用常量
我希望您同意在Swift中声明常量非常容易。 不需要外来关键字或复杂的语法。 声明常量就像声明变量一样容易,这不是巧合。
在Swift中鼓励使用常量。 如果值不会改变或您不希望它改变,那么它应该是一个常数。 这有很多好处。 好处之一是性能,但更重要的好处是安全。 通过尽可能使用常量,可以在代码中添加约束,从而使代码更安全。
3.数据类型
大多数编程语言都有各种各样的类型来存储字符串,整数,浮点数等。Swift中可用类型的列表很简洁。 看一下以下列表:
-
Int
-
Float
-
Double
-
String
-
Character
-
Bool
重要的是要了解上述类型不是基本类型或原始类型。 它们是命名类型,由Swift使用结构来实现。 在本系列的后面部分,我们将更详细地探讨结构,但是很高兴知道到目前为止,我们遇到的类型与您可能在例如Objective-C中使用的原始类型不同。
Swift中还有许多数据类型,例如元组,数组和字典。 我们将在本系列的后面部分探讨这些内容。
4.类型转换
我们还需要讨论另外一个主题, 类型转换 。 看一下下面的Objective-C代码片段。 该代码块将值314.000000
输出到控制台。
int a = 100;
float b = 3.14;
NSLog(@"%f", (a * b));
Objective-C运行时将a
隐式转换为浮点值,然后将其乘以b
。 让我们使用Swift重写上面的代码片段。
var a = 100
var b = 3.14
print(a * b)
现在忽略print(_:separator:terminator:)
函数。 我首先要关注a
和b
的乘法。 Swift推断出a
的类型(即Int
)和b
的类型(即Double
。 但是,当编译器尝试将a
和b
相乘时,它会注意到它们不是同一类型。 在您看来,这似乎不成问题,但对于Swift而言却是这样。 Swift不知道这种乘法的结果应该是哪种类型。 它应该是整数还是双精度数?
要解决此问题,我们需要确保乘法的两个操作数都属于同一类型。 Swift不会为我们隐式转换操作数,但是这样做很容易。 在下面的例子更新,我们创建了一个Double
使用存储在值a
。 这样可以解决该错误。
var a = 100
var b = 3.14
print(Double(a) * b)
需要注意的是类型a
没有改变。 即使上面的代码片段看起来像是类型转换,也不一样。 我们使用存储在a
的值来创建Double
,并将该结果用于与b
的乘法。 乘法的结果为Double
类型。
您需要记住的是,Swift与C和Objective-C不同。 它不会隐式转换变量和常量的值。 这是另一个重要的概念。
5.打印
在前面的代码片段中,您调用了第一个函数print(_:separator:terminator:)
。 此功能类似于Objective-C的NSLog
; 它会打印一些内容并追加新行。 要将某些内容打印到控制台或右侧的结果面板中,请调用print(_:separator:terminator:)
并向其传递一个参数。 可以是变量,常量,表达式或文字。 看下面的例子。
var string = "this is a string"
let constant = 3.14
print(string)
print(constant)
print(10 * 50)
print("string literal")
也可以使用字符串插值来组合变量,常量,表达式和文字。 在Swift中,字符串插值非常简单。 将变量,常量,表达式或文字包装在\()
。 非常简单。
let street = "5th Avenue"
let number = 10
print("She lives at \(street) \(number).")
结论
理解Swift如何处理变量和常量是关键。 尽管可能需要一些时间来适应常量的概念,但是一旦您接受了这种最佳实践,您的代码将更加安全并且易于理解。 在本系列的下一个教程中,我们将通过查看集合继续对Swift进行探索。
无论您是刚刚开始使用基础知识还是想探索更高级的主题,我们都构建了完整的指南来帮助您学习Swift 。
如果您想学习如何使用Swift 3编写现实应用程序代码,请查看我们的课程“ 使用Swift 3创建iOS应用程序” 。 无论您是iOS应用程序开发的新手还是想从Objective-C转向,此课程都将使您开始使用Swift进行应用程序开发。
翻译自: https://code.tutsplus.com/tutorials/swift-from-scratch-variables-and-constants--cms-22828