Swift基础入门(1):常量变量,基本数据类型和基本运算符

文章目录
  1. 1. 概要
  2. 2. 常量变量
    1. 2.1. 命名
    2. 2.2. 声明
    3. 2.3. 输出
    4. 2.4. 注释
  3. 3. 基本数据类型
    1. 3.1. 整数
    2. 3.2. 浮点数
    3. 3.3. 布尔值
    4. 3.4. 可选类型
    5. 3.5. 断言
    6. 3.6. 元组
    7. 3.7. 类型别名
    8. 3.8. 类型转换
  4. 4. 基本运算符
    1. 4.1. 普通运算符
    2. 4.2. 空合运算符(Nil Coalescing Operator)
    3. 4.3. 区间运算符(Range Operator)

Swift是苹果公司于2014年推出的用于iOS,OS X和watchOS应用开发的新语言。
基于Swift 1.2。
本篇介绍Swift的基础知识:常量变量,基本数据类型和基本运算符。

Title: Swift基础入门(1):常量变量,基本数据类型和基本运算符
Author: Yunyao Zhang(张云尧)
E-mail: aidaizyy@gmail.com
Last Modified: 2015-07-15

概要

Swift结合了C和Objectiv-C的特点,基于Cocoa和Cocoa Touch框架。
本文主要讲述Swift的基本语法。

常量变量

命名

常量变量命名不能包括数学符号,箭头,保留的Unicode码位,连线和制表符,不能以数字开头。

声明

声明常量使用let关键字,声明变量使用var关键字。
一般可省略数据类型,通过赋予的第一个值来自动确定数据类型。

1
2
let maxNumber = 20
var currentNumber = 0, item = 0.1

在swift中,语句结束不需要加分号。(添加分号也没有问题)
上面两句,声明了常量maxNumber,并赋值为20,这个值不能被改变。声明时可以不赋值,但之后只能赋值一次。
声明了变量currentNumberitem,并赋值为0和0.1,可赋值多次。
在一行中可声明多个常量或变量,用逗号隔开。
maxNumbercurrentNumber第一次赋值了整数,被确定为整数类型Intitem第一次赋值了小数,被确定为浮点数类型Double(未指定数据类型时,小数一定会被确定为Double而不是Float)。

基本数据类型:

  • Int
  • Double
  • Float
  • Bool
  • String
  • Character

声明常量变量时,也可以指定数据类型,通过在常量变量名称后接冒号再接数据类型名称来实现。

1
2
var currentNumer: Double = 5
println(currentNumber) //输出currentNumber的值

上面两句输出结果为5.0,因为currentNumber指定为Double类型,即使给它赋值了整数5。

输出

printlnprint函数都是输出函数,区别在于前者在输出末尾加上了换行符。

输出常量变量:

1
2
var currentNumer: Double = 5
println("The current number is \(currentNumber)")

上面两句输出结果为The current number is 0.5
通过\(常量变量)将常量变量转换为字符串并在println语句中输出。

注释

和C语言类似,注释分为单行注释//和多行注释/* */

1
2
3
var single //单行注释
/* 多行注释 */

不一样的地方在于,swift的/* */可以嵌套。

基本数据类型

整数

整数分为Int8UInt8Int16UInt16Int32UInt32Int64UInt64,分别对应8,16,32,64位的有符号整数类型和无符号整数类型。
一般IntInt32(32位电脑)或Int64(64位电脑)。
整数类型都有minmax两个方法。

1
2
var tmp = Int.max
println(tmp)

结果为9223372036854775807(64位电脑)。

1
2
3
4
let decimalInteger = 17 //十进制表示17
let binaryInteger = 0b1001 //二进制表示17
let octalInteger = 0o21 //八进制表示17
let hexadecimalInteger = 0x11 //十六进制表示17

二进制,八进制和十六进制分别加前缀0b0o0x表示。

浮点数

  • Double:64位浮点数,至少15位数字
  • Float:32位浮点数,最少6位数字
1
2
3
let decimalDouble = 12.1875 //十进制表示12.1875
let exponentDouble = 1.21875e1 //十进制指数表示12.1875
let hexadecimalDouble = 0xC.3p0 //十六进制指数表示12.1875

浮点数字面量可以用十进制和十六进制表示,指数分别用ep表示。

数值型字面量都可以加0或_,不影响数值,比如000_1_000.000_000_1等于1000.0000001

布尔值

Bool有两个值truefalse

可选类型

可选类型(_optionals)用来表示值可能丢失的情况:

  • 有值且等于x
  • 没有值
  • 有无值判断
    可以通过条件语句判断,if optional != nil,结果为ture即表示有值,否则表示无值。

  • 强制解析
    在名字后面加!强制获取可选类型的值,但必须在有值的情况下,否则会报错,optional!

  • 可选绑定

    1
    2
    3
    4
    let optionalValue: Int? = 123
    if let actualValue = optionalValue {
    } else {
    }

Int?在数据类型后面加?表示包含该数据类型的可选类型,optionalValue表示包含123的可选类型,如果包含值,则赋值给actualValue,并返回true,否则返回false

  • 无值:nil
    1
    2
    3
    4
    var optionalInt: Int? = 123
    optionalInt = nil
    var optionalStr: String?

可选类型可以被赋值为nil,即表示无值,这表示一个确定的值。
如果可选类型声明时没有赋值,则自动赋值为nil。

  • 隐式解析
    声明时将数据类型后面的?改为!,表示一个隐式解析可选类型,即每次自动解析,使用时可直接用常量变量名称。

断言

可选类型无值可能会影响程序运行,在某些特定情况下,需要终止程序,我们使用断言。
断言类似于条件判断语句,不同点在于,结果为false时直接终止程序。

1
2
let age = -3
assert(age >= 0, "age cannot be less than zero")

assert的第二个参数描述信息可以省略。

元组

元组(tuples)把多个数据类型组合成一个复合的数据类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let httpStatus1 = (statusCode: 200, description: "OK")
println(httpStatus1.statusCode, httpStatus1.description)
//输出“200OK”
let httpStatus2 = (200, "OK")
println(httpStatus2.0, httpStatus2.1)
//输出“200OK”
let (statusCode, statusMessage) = httpStatus2
println(statusCode, statusMessage)
//输出“200OK”
let (statusCode, _) = httpStatus2
println(statusCode)
//输出“200”

元组用括号(Int, String)表示一个整数和一个字符串组合,可以给元组的单个元素命名,比如第1行的statusCodedescription,调用时直接用httpStatus1.statusCodehttpStatus2.description表示;如果不命名,则用.0.1表示。
也可以把元组内容分解,比如第9行,分别用statusCodestatusMessage存储元组httpStatus2对应的元素。分解过程中忽略的部分可用_表示,比如第13行,只使statusCode存储元组httpStatus2的第一个元素,忽略第二个元素。

类型别名

1
2
typealias tmpType = Int
let tmpValue: tmpType = 4

通过typealias关键字,给现有的数据类型再起一个新的名字,可替代使用。
常量tmpValue的数据类型就是Int

类型转换

  • Int,Double,Float:
    Int16Int8不能直接相加,需要通过Int16(Int8)转换。
    同样,DoubleInt也不能相加,也需要通过Double(Int)转换,如果只需要整数部分,也可以通过Int(Double)转换。

  • String,Int:
    String->Int:String.toInt()函数可以把String转换成可选类型Int?,因为String中不一定能转换成Int,所以得到可选类型。
    Int->String:String(Int)函数可以把Int转换成String

基本运算符

普通运算符

大部分基本运算符和主流语言一致:

  • +:加
  • -:减
  • *:乘
  • /:除
  • =:赋值
    - 不返回值,将`if a == b`误写成`if a = b`会出现编译错误。
    - 元组赋值,`let (x, y) = (1, 2)`,表示`x = 1`且`y = 2`。
    
  • %:求余
    - 除了整数,也可以对浮点数求余,`8 % 2.5`等于`Double`值`0.5`。
    
  • ++:自增
  • –:自减
    - 除了整数,浮点数也可以自增和自减。
    
  • -:负号
  • +:正号
  • +=, -=, *=, /=, %=:复合赋值
  • ==:等于
  • !=: 不等于
  • >, <, >=, <=:比较运算符
  • ===, !===:是否引用同一个对象实例
  • ? : :三目运算符
  • &&:与
  • ||:或
  • !:非
  • ():括号,确定运算先后顺序

空合运算符(Nil Coalescing Operator)

a ?? b:其中a必须是可选(Optional)类型,b的类型与a存储的值的类型一致。
如果a包含一个值,就返回a包含的值;否则返回默认值b,等同于a != nil ? a! : b

区间运算符(Range Operator)

a..<b,闭区间运算符,表示ab的区间,包含a,不包含b
a...b,半开区间运算符,表示ab的区间,包含ab

转载请注明原作者和出处。

如果觉得这篇文章对您有帮助或启发,请随意打赏~