常量和变量
常量和变量的声明
// 常量的声明
let number = 5
let string = "string"
// 多个常量同时声明,中间用“,”隔开
let num1 = 5, num2 = 5
// 变量的声明
var string1 = "string1"
var num3 = 6 ,num4 = 6
常量和变量的类型
// 常量与变量的类型可以在声明时指定类型,如果在声明时没有指定,编译器会根据所附的值进行判断。
// 声明变量时,指定类型
var name:String
name = "your name"
// 未指定类型,经判断为字符串
var sex = "f"
// 由于Swift是强类型语言,不能进行类型的转换。因此变量`sex`赋值只能是字符串类型。
常量和变量的命名
- 可以使用汉字、韩文、日语等所有国际语言命名
- 在使用英文命名时,尽量遵守命名规范
- 不能包含数学符号 +、-、* 等
- 不能包含箭头
- 不能以数字开头
- 不能使用保留的Unicode码位、连线和制表符
- 不能以关键字作为变量、常量名
常量和变量的输出
print("输出")
// 输出
NSLog("name is %@", "hello")
// 2017-08-07 16:58:12.677 LearnSwift_1[15617:1350198] name is hello
var sex = "f"
print("sex is \(sex)")
// sex is f
分号(;)
对于每行代码结尾处,并不强制使用分号,但是如果多行代码写在一行,则需要使用分号进行间隔。
类型定义
- Swift除了基础类型Int、Long、Float、Double等,还有元组Tube、Struct、Enum类型,除此之外,还加入了特有的可选类型。
整形
// 有符号整形
let maxValueOfInt8 = Int8.max // 127
let maxValueOfInt16 = Int16.max // 32767
let maxValueOfInt32 = Int32.max // 2147483647
let maxValueOfInt64 = Int64.max // 9223372036854775807
// 无符号整形
let maxValueOfUInt8 = UInt8.max // 255
let maxValueOfUInt16 = UInt16.max // 65535
let maxValueOfUInt32 = UInt32.max // 4294967295
let maxValueOfUInt64 = UInt64.max // 18446744073709551615
浮点型
- Double表示64位浮点型
- Float表示32位浮点型
自定义类型(typealias),类型别名
即对原有数据类型进行别名处理
typealias 整数 = Int
var number:整数 = 1000
常数和数值进制的表示方法
// 数值进行表示方法
let decimalInteger = 17
let binaryInteger = 0b10001 // 二进制 17
let octalInteger = 0o21 // 八进制 17
let hexadecimalInteger = 0x11 // 十六进制 17
// 字面量内添加额外的"_"和"0",提高阅读效率
let number1 = 000_100_000_114 // 100000114
let number2 = 100_000_114 // 100000114
let number3 = 12.123_330 // 12.123330
类型转换
- 不同类型之间可以认为是不可以进行互相转换的,只能是重新产生一个值和对象,并拷贝一份。
- 在整形数值类型转换时,短整型可以成功向长整形转化,反之不一定成功。
let int8:Int8 = 12
let int16:Int16 = 14 + Int16(int8)
// 整形转化浮点型
let intValue = 12
let floatValue = Float(intValue) + 12.3 // 24.3
// 浮点型转化整形
let floatValue = 12.3
let intValue = 1234 + Int(floatValue) // 1246
布尔类型
布尔类型只有两个值true或者false
元组(Tube)
- 元组语法允许将多个不同类型的值组合成一个复合值并且赋值给一个变量或者常量;
- 在取值时可以根据下标从0开始取值;
- 还可以为每个元素进行命名,便于利用元素名进行取值。
var tubeOne = ("first",100)
print("\(tubeOne.0)---\(tubeOne.1)")
// first---100
var tubeTwo = (name:"firstName",sex:"man")
print("\(tubeTwo.name)++\(tubeTwo.sex)")
// firstName++man
- 获取元组中元素的值,可以通过对元组进行分解、匹配获取
- 对于不需要的值得地方可以用”_”替代
let tubeThree = (name:"firstName",sex:"man")
let (nameString,sexString) = tubeThree
let (nameString1,_) = tubeThree
print("\(nameString)")
// firstName
可选类型
可选类型声明
- 可选类型是在现有的类型后面加上一个问号”?”,表示不确有没有对该变量进行赋值
var srt:String?
- 可以将命名的变量类型理解为String?类型,而不是String
可选类型赋值
- 可以直接使用变量名进行赋值,也可以直接赋值为nil
可选类型使用
- 在使用可选类型变量时,需要在变量名的后面加上感叹号”!”
- 对于可能不赋值的变量,声明为可选类型,在正式使用时利用”!”确认其已被赋值。
var str:String?
str = "String"
print(str!)
// String
- 如果一个变量被声明为可选变量时,如果没有被赋值,则它默认被赋值成了nil。
var str:String?
print(str)
// nil
基本运算符
赋值运算符
- =
算术运算符
- +(加)、-(减)、*(乘)、%(取余)、/(除)
- 在算术运算符中,废除了自增(++)和自减(++)运算符
比较运算符
- >、<、>=、<=、==、!=
三目运算符
- 条件?条件成立代码:条件不成立
逻辑运算符
- !(逻辑非)、&&(逻辑与)、||(逻辑或)
- 逻辑运算符中具有中止属性:逻辑与中,如果前一条件为false,则不会去判断后一条件;逻辑或中,如果前一条件为true,则不会判断后一条件
复合运算符
- +=、-=、*=、/=、%=
区间运算符
- 闭区间”…”包含最后一个值
- 开区间”..<”不包含最后一个值
// 闭区间
for a in 0...5 {
print("\(a)")
}
// 0 1 2 3 4 5
// 开区间
for b in 0..<5 {
print("\(b)")
}
// 0 1 2 3 4
断言(Assert)操作
/*
* 断言有两个参数
* 参数一:判断条件,返回一个布尔值,当返回false值,程序中断
* 参数二:当判断条件返回false值时,输出参数二内的语句。
* /
let a = 1
assert(a>=2, "数值不能大于1")
// assertion failed: 数值不能大于1