寫在前面
1.Swift保持了OC的參數命名系統刁绒,但是在語法上更簡潔嗓袱,可讀性更強 代碼更容易被維護
2.Swift安全性更高
3.Swift在編譯和運行上都經過了更精確的優(yōu)化 所以相比更快
....
一.常量和變量
常量用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)
七.區(qū)間運算符和for - in循環(huán)
// 閉區(qū)間[a, b] 等價于 a...b
// 前閉后開區(qū)間[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"http:// 可變字符串
str2 = "Sunshine"
str2 += ",你好赔蒲!" // 打印的結果是:Sunshine泌神,你好
Q:如何定義一個空字符串?
var empty_str1 = ""
var empty_str2 = String()
empty_str1 += "Sunshine" // empty_str1變成Sunshine
empty_str1.isEmpty // 來判斷當前字符串是否為空
使用for - in循環(huán)循環(huán)來遍歷字符串
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