常量和变量: 常量和变量必须在使用前声明,用let来声明常量,用var来声明变量 多个常量或者多个变量,用逗号隔开: var x = 0.0,y = 0.0,z = 0.0 给变量或指定类型:常量或者变量名后面加上一个冒号和空格,然后加上类型名称。 var welcomeMessage: String 表示: 声明一个类型为String,名字为welcomeMessage的变量,类型为String”的意思是“可以存储任意String类型的值。” 注意: 一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,请参考类型安全和类型推断。 在上面的例子中,没有给welcomeMessage赋初始值,所以变量welcomeMessage的类型是通过一个类型标注指定的,而不是通过初始值推断的。 常量的值一旦被确定就不能更改了。 <code> println</code>函数来输出当前常量或变量的值: <pre><code class="lang-swift"><span class="hljs-built_in"> println</span>(<span class="hljs-string">"This is a string"</span>) Swift 用<em>字符串插值(string interpolation)</em>的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。 将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义: </code><pre><code class="lang-swift"><span class="hljs-built_in"> println</span>(<span class="hljs-string">"The current value of friendlyWelcome is <span class="hljs-subst">\(friendlyWelcome)</span>"</span>);//</code><code class="lang-swift"><span class="hljs-comment"> 输出 "The current value of friendlyWelcome is Bonjour!</span></code><code class="lang-swift"> </code><pre><code class="lang-swift"><span class="hljs-comment">// 这是一个注释</span></code>
/* 这是一个,多行注释 */ Swift 提供了8,16,32和64位的有符号和无符号整数类型。这些整数类型和 C 语言的命名方式很像,比如8位无符号整数类型是UInt8
,32位有符号整数类型是Int32
。 就像 Swift 的其他类型一样,整数类型采用大写命名法。 UInt8Int32
Double
表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。
Float
表示32位浮点数。精度要求不高的话可以使用此类型。
类型推断,编译器可以在编译代码的时候自动推断出表达式的类型。原理很简单,只要检查你赋的值即可
类型别名(type aliases)就是给现有类型定义另一个名字。你可以使用
typealias
关键字来定义类型别名。
当你想要给现有类型起一个更有意义的名字时,类型别名非常有用。假设你正在处理特定长度的外部资源的数据:
typealias AudioSample = UInt16
定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名:
var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound 现在是 0
本例中,AudioSample
被定义为UInt16
的一个别名。因为它是别名,AudioSample.min
实际上是UInt16.min
,所以会给maxAmplitudeFound
赋一个初值0
。
Swift 有两个布尔常量,
true
和
false
:
如果你在需要使用Bool
类型的地方使用了非布尔值,Swift 的类型安全机制会报错。下面的例子会报告一个编译时错误:
let i = 1
if i {
// 这个例子不会通过编译,会报错
}
然而,下面的例子是合法的:
let i = 1
if i == 1 {
// 这个例子会编译成功
}
元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
如:
let http404Error = (404,"Not Found")
你可以将一个元组的内容分解(decompose)成单独的常量和变量,然后你就可以正常使用它们了:
如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线()标记:
此外,你还可以通过下标来访问元组中的单个元素,下标从零开始:
你可以在定义元组的时候给单个元素命名:
给元组中的元素命名后,你可以通过名字来获取这些元素的值:
作为函数返回值时,元组非常有用。一个用来获取网页的函数可能会返回一个元组来描述是否获取成功。和只能返回一个类型的值比较起来,
一个包含两个不同类型值的元组可以让函数的返回信息更有用。请参考函数参数与返回值。
注意:
元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构。如果你的数据结构并不是临时使用,请使用类或者结构体而不是元组。请参考类和结构体。
可选类型(optionals)来处理值可能缺失的情况。可选类型表示:
有值,等于 x 或者 没有值
来看一个例子。Swift 的类型有一个叫做的方法,作用是将一个值转换成一个值。然而,
并不是所有的字符串都可以转换成一个整数。字符串可以被转换成数字,但是字符串不行。
下面的例子使用方法来尝试将一个转换成:
因为方法可能会失败,所以它返回一个可选类型(optional),而不是一个。一个可选的被写作而不是。
问号暗示包含的值是可选类型,也就是说可能包含值也可能不包含值。(不能包含其他任何值比如值或者值。只能是或者什么都没有。)
let (statusCode,statusMessage) = http404Error
println("The status code is \(statusCode)")
// 输出 "The status code is 404"
println("The status message is \(statusMessage)")
// 输出 "The status message is Not Found" _let (justTheStatusCode,_) = http404Error
println("The status code is \(justTheStatusCode)")
// 输出 "The status code is 404"println("The status code is \(http404Error.0)")
// 输出 "The status code is 404"
println("The status message is \(http404Error.1)")
// 输出 "The status message is Not Found"let http200Status = (statusCode: 200,description: "OK")println("The status code is \(http200Status.statusCode)")
// 输出 "The status code is 200"
println("The status message is \(http200Status.description)")
// 输出 "The status message is OK"(Int,String)StringtoIntStringInt"123"123"hello,world"toIntStringIntlet possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"toIntIntIntIntInt?IntIntBoolStringInt