Swift 是一门为 iOS,macOS,watchOS,和 tvOS app开发设计的全新语言。尽管如此,Swift 有许多部分对于有 C 和 Objective-C 开发经验的人来说是非常熟悉的。
对于C 语言和 Objective-C 的所有基本类型,Swift 都有它自己的版本。包括 Int
来自 integers
,Double
和 Float
来自 float-point values
, Bool 来自 Boolean values
,String
来自 Textual data
。Swift 也提供三个强大的集合类型 Array
Set
Dictionary
。
像 C 语言一样,Swift 使用变量名来存储和引用值。Swift 还广泛使用了无法改变值的变量,这些被称之为常量
,并且比 C 语言中的常量更加强大。在整个 Swift 中使用常量来代表不可以改变的值,可以让代码更加安全、意图更加清晰。
除了这些熟悉的类型,Swift 还引入了Objective-C 没有的高级类型,比如 Tuples
。Tuples
可以让你创建和传递一组的值。你从一个function
中使用 Tuple
作为一个复合值返回多个值。
Swift 也引入了Optional
类型,用于处理缺省值。 Optionals
表示“要么是一个具体值,要么不是一个值”。使用 Optionals
类似于 Objective-C 对指针赋值 nil
,但是可以是任何类型,不局限于 Classes
。于 Objective-C 相比,Optionals
不仅更加安全而且更具表达力,它是许多 Swift 最强大特性的核心。
Swift 是一个类型安全的语言,这意味着 swift 可以帮助你更加容易弄清代码中类型可以用的值。如果你的代码需要一个String
,类型安全帮你避免错误的传递一个 Int
值给它。同样的,类型安全帮助你避免偶然的传递一个 Optional String
给一个 non optional String
。类型安全帮助你在开发中尽可能早的捕获和修正错误。
Constants and Variables 常量和变量
常量和变量关联一个名字(就像 maximumNumberOfLoginAttempts
或 welcomeMessage
)具体来说(就像数字 10
或者 字符串Hello
)。常量的值一旦设定就不能被改变了,然而变量可以在将来设置成不同的值。
Declaring Constants and Variables 声明常量和变量
常量和变量使用之前必须被声明。你声明常量使用关键字let
,声明变量使用关键字var
。下面是一个例子,展示常量和变量是如何用于记录登陆尝试次数的:
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0
上面的代码可以这样解读:
“声明一个新的常量叫做 maximumNumberOfLoginAttempts
并且赋值为 10。然后,声明了一个新的变量叫做currentLoginAttempt
并且初始化赋值为 0。”
在这个例子中,最大运行尝试登陆次数是被声明成一个常量,因为最大次数永远不会被改变。而当前尝试登陆次数被声明成一个变量,因为这个值必须随着登陆失败递增。
你可以在一行里面声明多个常量或者多个变量,用都好进行分割:
var x = 0.0, y= 0.0, z = 0.0
NOTE
如果在你的代码里面储存的值是不需要改变的,请尽量使用let
关键字来声明成常量。变量仅适用于存储需要改变的值。
Type Annotations 类型注解
当你声明一个常量或者变量的时候,你可以提供类型注解,更加清晰的表明这个常量或变量能存储的类型。类型注解的写法:在常量或变量名后加一个冒号,冒号后面跟一个空格,空格后面跟着类型注解的名称。
下面的例子展示为变量 welcomeMessage
进行注解,指明这个变量只能存储 String
类型的值:
var welcomeMessage: String
顿号可以解读为“什么的类型”,所以上面的代码可以这样解读:
“声明一个变量叫welcomeMessage
,它的值只能是 String
的类型。”
welcomeMessage
变量现在可以被赋值任何 String 值而不会报错。
welcomeMessage = "Hello"
你可以在一行里面定义相同类型的多个变量,用逗号分隔,在最后的变量名称后面添上冒号并且加上类型注解。
var red, green, blue: Double
Naming Constants and Variables
常量和变量的名字可以包含任何字符,包括 Unicode 字符:
let π = 3.14159
let 你好 = "你好世界"
let 🐶🐮 = "dogcow"
常量和变量名称不能包含空格字符,数学符号,箭头,专用的Unicode标量值或线条和框形图字符。 它们也不能以数字开头,尽管数字可能包含在名称中的其他位置。
一旦你声明一个常量或变量为一个具体类型,你就不能用同一个名字再次声明了,或者用它存储其他类型的值,也不能把常量转改成变量,变量改成常量。
NOTE
如果你给一个常量或者变量命名为 Swift 的保留关键字,则用这个名字的时候,需要(`)这个字符去包裹它。尽管如此,尽量避免使用 Swift 的保留关键字,除非你别无选择了。
你可以改变一个现有的变量用另一个兼容的值。在这个例子中friendlyWelcome
从Hello!
改变成Bonjour!
:
var friendlyWelcome = "hellow!"
friendlyWelcome = "Bonjour!"
和变量不同,常量的值在设定之后是不能被改变的。尝试改变他将会导致代码在编译的时候报错:
let languageName = "Swift"
language = "Swift++"
// This is a compile-time error: languageName cannot be changed.
Printing Constants and Variables 打印变量或者常量
你可以利用 print(_:separator:terminator:)
函数来打印变量或者常量的当前值
print(friendlyWelcome)
// Prints "Bonjour!"
print(_:separator:terminator:)
是一个全局函数会将结果打印的合适的地方输出。在 Xcode 中,print(_:separator:terminator:)
函数会将结果输出到 Xcode 的 “console”面板中。separator
和terminator
都有默认值,所以你能省略它们之间调用函数。默认情况下,这个打印函数会在末尾加上换行符。
Swift 使用插值法将一个常量或者变量的名称作为较长字符串中的占位符,并提示 Swift 使用当前常量或者变量的值去替换它们。用()
开括号包裹常量或变量,并在开括号前面加上\
反斜杠.
print("The current value of friendlyWelcome is \(friendlyWelcome)")
// Prints "The current value of friendlyWelcome is Bonjour!"
网友评论