写在前面
1.Swift保持了OC的参数命名系统,但是在语法上更简洁,可读性更强 代码更容易被维护
2.Swift安全性更高
3.Swift在编译和运行上都经过了更精确的优化 所以相比更快
....
一.常量和变量
常量用let
来表示,一旦赋值就不能再被改变
变量用var
来表示,赋值之后还可以再改变
如:
let number1 = 100
var number2 = 99
Swift是一门类型安全(type safety)的语言,虽然没有确定变量类型 其实已经有类型了
Q:Swift如何来显式声明类型呢?
var str:String // 表示显式声明了str是String类型的变量
str = "Sunshine"
var num1, num2, num3:Double // num1, num2, num3都是Double类型的变量
num1 = 1.0
num2 = 2.0
num3 = 3.0
// Double是64位的浮点数,Float是32位的浮点数,一般来说Double精确到小数点后面15位,Float精确到小数点后面6位
let binaryInt:Int = 0b1001 // 0b:二进制的数据前缀
Q:强制类型转换?
强制类型转换:在需要转换的变量之前加上(需要转换的类型)
,转换的类型需要用()
let number_a:Int = 3
let number_b:Double = 0.1415926
let pi:Double = (Double)(number_a) + number_b
Q:字符串拼接?
let 姓名:String = "Sunshine"
姓名 + ",你好!" // Sunshine,你好!
二.布尔类型和if语句
布尔值用true
和false
来表示,全是小写
if
语句的{}必不可少,即使{}里面只有一句话也不能省略
Swift里面没有把非0的值作为真的这种说法
let imtruevar = true
let imfalsevar = false
if imtruevar {
print("I am true")
}else {
print("I am false")
}
if 3 + 4 == 7 {
print("3 + 4 =7")
}else {
print("I am false")
}
三.Swift元组 Tuples
元组:将多个不同的值集合成一个数据 如(true,"Sunhsine","女"),它是Swift新引进的一种新的数据类型
元组的特点:1 - 可以有任意多个值
2 - 不同的值可以是不同的类型
// 第一种写法
let tuplesregisterResult = (true, "Sunshine", "女")
let (isRegisterSucc, name, sex) = tuplesregisterResult
isRegisterSucc // true
name // Sunshine
sex // 女
// 第二种写法
let tuplesregisterResult = (isRegisterSucc:true, name:"Sunshine", sex:"女")
tuplesregisterResult.isRegisterSucc // true
tuplesregisterResult.name // Sunshine
tuplesregisterResult.sex // 女
在提取元组数据时可能对某部分数据不关心,可以使用下划线_
忽略部分数据
如:
let loginResult = (true, "sunshine")
let (isloginsucc, _) = loginResult
if isloginsucc {
print("登录成功")
}
Q:元组如何显式的声明数据类型?
用,
隔开,声明每个变量的类型,如:
let connectResult:(Int, String) = (404, "Not Found")
四.可选型 Optionals
Optionals:可选值
1 - 或者是一个值 或者是没有值
2 - 没有值时为nil
Q:如何显式的将一个变量声明成可选值?
var imoptionalvariable:Int?
let userInput = "sunshine";
var age = Int(userInput) // 把userInput转化为Int
// age! 表示age一定是有值的 就用!
if age != nil {
// print("your age is \(age!)")
// print("your age is" + String(age)) // 强制类型转换不能针对可选值 所以这样写会出错
// age! 可以叫做是可选型的解包
print("your age is" + String(age!))
}else {
print("inpunt is not avariable")
}
let string_a:String! = "Sunshine" // 表示在声明的时候就明确表示string_a是有值的。
五.基础运算符
let a = 10
let b = 5
var c = 0
a + b
a - b
a * b
a / b
a % b
// ? : : // 条件运算符
// 这也是Swift更安全的一个体现
Int.max + 1 // 报错 溢出的错误
Int.min - 1 // 报错
// 其他运算符:a === b a !== b
六.聚合运算符
// a ?? b 等价于: a != nil ? a! : b
// 聚合运算符有两个要求: 1 - a必须是可选类型
2 - b的类型必须是a相同的a必须是可选类型
var userName:String?
userName = "sunshine"
if userName != nil {
print("Hello my name is \(userName)")
}else {
print("Hello guest")
}
// 等价于下面的写法
let outputName:String = userName != nil ? userName! : "guest"
print("Hello" + outputName)
// 等价于下面的第一种写法
let outputName:String = userName ?? "guest"
print("Hello" + outputName)
七.区间运算符和for - in循环
// 闭区间[a, b] 等价于 a...b
// 前闭后开区间[a,b) 等价于 a..<b
for index in 1...10 {
index // index 是个常量
}
八.逻辑运算符
!a
a && b
a || b
九.String和Character
let str1 = "I am a immutable string" // 表示不可变字符串
var str2 = "I am mutable string"// 可变字符串
str2 = "Sunshine"
str2 += ",你好!" // 打印的结果是:Sunshine,你好
Q:如何定义一个空字符串?
var empty_str1 = ""
var empty_str2 = String()
empty_str1 += "Sunshine" // empty_str1变成Sunshine
empty_str1.isEmpty // 来判断当前字符串是否为空
使用for - in循环循环来遍历字符串
for c in empty_str2 {
print(c) // 会打印出字符串中的每个字符
}
声明一个Character的数据类型
var ch:Character = "s" // 此时的ch就是Character的数据类型 里面只能有一个字符
empty_str2.append(ch)
empty_str2.appending("hello")
PS:允许两个字符串相加 但是不允许字符串和Character类型的相加
计算字符串的长度
str1.characters.count
十.String的基本操作
字符串插值:(要插入的字符串)
var inter_str1 = "Sunshine"
var inter_str2 = "你好"
print("\(inter_str1),\(inter_str2)")// 打印结果:Sunshine,你好
字符串的比较
let com_str1 = "abc"
let com_str2 = "abc"
let com_str3 = "accd"
let com_str4 = "abcd"
com_str1 == com_str2 // 结果为true
// 使用字典序来比较字符串
com_str1 < com_str3 // 结果为true
// 注意:使用字典序是不用看它的长度的
com_str3 > com_str4 // 结果为true
字符串的前缀和后缀
// hasPrefix:是否有前缀
// hasSuffix:是否有后缀
let arrs = ["第一章:1.1","第一章:1.2","第一章:1.3","第二章:2.1","第二章:2.2","第二章:2.3","第二章:2.4","第二章:2.5","第三章:3.3","第三章:3.3","第三章:3.3"]
var count = 0
for name in arrs {
if name.hasPrefix("第二章") {
count += 1 // count++ 在Swift3之后已经被废弃 不能使用
}
}
print("第二章总的章数 - \(count)") // 打印结果:第二章总的章数 - 5