- 發(fā)布于2014年WWDC,支持iOS、OS X、watchOS,結合了C和Objective-C的優(yōu)點的一門新語言。
- 特性
- 安全性 提供了更多安全措施,比如值使用前初始化、自動內(nèi)存管理等。
- 快速性 llvm編譯框架,運行速度快。
- 表現(xiàn)力 語法簡單,易于閱讀維護。
- 兼容性 繼承了c語言和oc的特性,并克服了C的兼容性問題。
還有以下特點:
- 沒有宏系統(tǒng),其協(xié)議和擴展源自oc
- 采用let常量、var變量聲明變量
- 沒有顯示指針,而是像C#語言一樣,依賴值類型/引用類型
- 不支持強制轉(zhuǎn)換
-
Swift具有強大的命名字符集,支持代碼預覽,我們可以通過playground來學習swift的語法
file - new - playground
playground 變量和常量
變量和常量都要有類型, 值必須與分配的類型相同,代碼結尾;不要求,加不加都不會報錯,注釋與OC相同
var aVariable = 100
aVariable = 50
let string = "string"
/** 多變量 逗號 分割 */
var x = 0.0, y = 0.0, z = 0.0
- 類型 寫法
var 標識符:類型 = 初始值
let 標識符:類型 = 初始值
var name: String = "Mark"
let x: Int = 1
let y: Int = 2
let z: Int = 3
print(x + y + z)
- 字符串
支持轉(zhuǎn)義字符,多行需要在首行、尾行添加三引號,并需要刪除縮進效果
let label = "The width is "
let width = 100
let widthLabel = label + String(width)
print("The width is \(width)")
let quotation = """
I have \(x + y + z) apples.
And you said you
"""
- 數(shù)組、字典、集合、元組
數(shù)組:存放相同數(shù)據(jù)類型元素,有序
var productList = ["apple", "orange", "banana"]
productList[1] = "purple"
print(productList)
productList.append("water")
// 創(chuàng)建空數(shù)組
productList = []
print(productList)
let shoppingList: [String] = []
字典:存放key-value對元素
var productInfo = ["name": "apple", "price": String(4)]
productInfo["color"] = "green"
print(productInfo)
// 創(chuàng)建空字典
productInfo = [:]
print(productInfo)
let occupations: [String: Float] = [:]
集合:無序、不重復的相同類型元素
let favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
元組:不同數(shù)據(jù)類型元素的集合
let aturple = (21, 180, 60, "healthy", true)
- 可選類型Optional
可選類型Optional是Swift特有的數(shù)據(jù)類型,可選類型的值可能是某個類型的值也可能是nil(表示沒有值),可選類型的定義,在類型后面加“?”,nil可以表示變量值缺失。
可選項類型
可選類型在使用的時候必須要拆包,下面提供Optional的三種使用方式:
-
隱式拆包
在定義可選類型的時候使用“!”,后面使該可選類型的時候不需要強制解包
let string1: String! = "Hello"
string1.count
-
強制解包
使用可選類型變量時,在其后加“!”,如果使用不合法編譯器會報錯。
let string0: String? = "Hello"
print(string0!)
string0!.count
// 添加保護判斷,否則nil時會報錯
if string0 != nil{
let count = string0!.count
print(count)
}
-
if-let可選綁定
使用if let臨時常量 = 可選類型來判斷可選類型是否包含值,如果包含就把值賦給臨時常量,否則(可選類型為nil時)if語句判斷為假。
例1:
var optionalName: String? = "John"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello,\(name)"
print(greeting)
print(name)
}
例2:
var string5: String? = "Marry"
/**
① 使用`a ?? b`合并空值運算符的方式來解包,如果有值,則為count,如果為nil,則默認0
使用合并控制運算符有兩個條件:
1. 表達式a必須是可選類型
2. 表達式b必須和a的處處類型相同
*/
if string5 != nil{
let count = string5?.count;
print(count ?? 0)
}
// 使用可選項綁定來判斷可選項是否有值,如果有就賦值給臨時變量。同一個if語句可以有多個可選項綁定,用, 分開即可
// ② 使用可選項綁定
if let tempStr = string5{
let count = tempStr.count
print(count)
}
- 條件語句
-
if分支語句:
var teamScore: Float = 0
let personalScore = 51.0
if personalScore > 50.0{
teamScore += 3
}else{
teamScore += 1
}
print(teamScore)
-
switch分支語句:
var vegetable = "red pepper"
switch vegetable{
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)")
default:
print("Everything tastes good in soup")
}
- 循環(huán)語句
for循環(huán):
var total = 0
for i in 0..<4{
total += i
}
print(total)
不使用循環(huán)每一項的值時,可以使用下劃線“_”替代變量名:
let max = 10
let base = 3
for _ in 1...max{
total += base
}
print(total)
循環(huán)取數(shù)組值:
let array = [1, 3, 5, 7, 9]
var total = 0
for num in array{
total += num
}
print(total)
取字典中值:
let interestingNumbers = ["Prime": [2, 3, 5, 7, 11, 13],"Fibonacci": [1, 1, 2, 3, 5, 8],"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
while循環(huán)(當型循環(huán)):
var n = 2
while n < 100{
n *= 2
}
print(n)
while-repeat循環(huán)(直到型循環(huán):循環(huán)體至少執(zhí)行一次)
var m = 2
repeat {
m *= 2
} while m < 100
print(m)

