簡(jiǎn)單記錄學(xué)習(xí)Swift的筆記
簡(jiǎn)單值
使用
let
來(lái)聲明常量赠幕,使用var
來(lái)聲明變量。常量或者變量的類型询筏,必須和你賦給它們的值一樣榕堰。然而,不用明確地聲明類型嫌套,聲明的同時(shí)賦值的話逆屡,編譯器會(huì)自動(dòng)推斷類型。
如果初始值沒(méi)有提供足夠的信息(或者沒(méi)有初始值),那你需要在變量后面聲明類型,用冒號(hào)分割扔枫。
值永遠(yuǎn)不會(huì)被隱式轉(zhuǎn)換為其他類型码泞。如果你需要把一個(gè)值轉(zhuǎn)換成其他類型,請(qǐng)顯式轉(zhuǎn)換。
例如
let label = "The width is"
let width = 94
let widthLabel = label + String(width)
- 有一種更簡(jiǎn)單的把值轉(zhuǎn)換成字符串的方法:把值寫(xiě)到括號(hào)中,并且在括號(hào)之前寫(xiě)一個(gè)反斜杠。
let firstWord = "Lin"
let secondWord = "i love \(firstWord)"
- 使用方括號(hào)[]來(lái)創(chuàng)建數(shù)組和字典谣旁,并使用下標(biāo)或者鍵(key)來(lái)訪問(wèn)元素。最后一個(gè)元素后面允許有個(gè)逗號(hào)滋早。
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1]
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
- 要?jiǎng)?chuàng)建一個(gè)空數(shù)組或者字典榄审,使用初始化語(yǔ)法。
let emptyArray = [String]()
let emptyDictionary = [String: String]()
- 如果類型信息可以被推斷出來(lái)馆衔,你可以用
[]
和[:]
來(lái)創(chuàng)建空數(shù)組和空字典——就像你聲明變量或者給函數(shù)傳參數(shù)的時(shí)候一樣瘟判。
shoppingList = []
occupations = [:]
控制流
使用
if
和switch
來(lái)進(jìn)行條件操作怨绣,使用for-in
、for
拷获、while
和repeat-while
來(lái)進(jìn)行循環(huán)篮撑。包裹條件和循環(huán)變量括號(hào)可以省略,但是語(yǔ)句體的大括號(hào)是必須的匆瓜。
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore)
在
if
語(yǔ)句中赢笨,條件必須是一個(gè)布爾表達(dá)式你可以一起使用
if
和let
來(lái)處理值缺失的情況。這些值可由可選值來(lái)代表驮吱。一個(gè)可選的值是一個(gè)具體的值或者是nil
以表示值缺失茧妒。在類型后面加一個(gè)問(wèn)號(hào)來(lái)標(biāo)記這個(gè)變量的值是可選的。
var optionalString: String? = "Hello"
print(optionalString == nil)
var optionalName: String? = "Lin"
var greeting = "Hello!"
optionalName = nil
if optionalName == nil {
greeting = "Lix love Lin ??"
}else{
let name = optionalName
greeting = "\(name) love Lix ??"
}
如果變量的可選值是
nil
左冬,條件會(huì)判斷為false
桐筏,大括號(hào)中的代碼會(huì)被跳過(guò)。如果不是nil
拇砰,會(huì)將值賦給let
后面的常量梅忌,這樣代碼塊中就可以使用這個(gè)值了。另一種處理可選值的方法是通過(guò)使用
??
操作符來(lái)提供一個(gè)默認(rèn)值除破。如果可選值缺失的話牧氮,可以使用默認(rèn)值來(lái)代替。
let nickName: String? = "球球 ??"
let fullName: String? = "LinHong"
let informalGreeting = "Hi \(nickName ?? fullName)"
-
switch
支持任意類型的數(shù)據(jù)以及各種比較操作——不僅僅是整數(shù)以及測(cè)試相等瑰枫。
let sport = "basketball"
switch sport {
case "football":
print("this is the first sport")
case "running":
print("Lin was running everyday")
case let x where x.hasSuffix("ball"):
print("Lix play \(sport) everyday")
default:
print("keep moving")
}
運(yùn)行
switch
中匹配到的子句之后踱葛,程序會(huì)退出switch
語(yǔ)句,并不會(huì)繼續(xù)向下運(yùn)行光坝,所以不需要在每個(gè)子句結(jié)尾寫(xiě)break
尸诽。你可以使用
for-in
來(lái)遍歷字典,需要兩個(gè)變量來(lái)表示每個(gè)鍵值對(duì)盯另。字典是一個(gè)無(wú)序的集合逊谋,所以他們的鍵和值以任意順序迭代結(jié)束。
let interestingNumbers = [
"Prime": [2,3,5,7,11],
"Fibonacci": [1,1,2,3,5,8,13],
"Square": [1,4,9,16]
]
var largest = 0
var numberClass = "number"
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
numberClass = kind
}
}
}
print(largest)
print(numberClass)
- 使用
while
來(lái)重復(fù)運(yùn)行一段代碼直到不滿足條件土铺。循環(huán)條件也可以在結(jié)尾,保證能至少循環(huán)一次板鬓。
var n = 2
while n < 100 {
n = n * 2
}
print(n)
var m = 2
repeat {
m = m * 2
} while m < 100 //循環(huán)條件可以在結(jié)尾悲敷,至少保證循環(huán)一次
print(m)
- 你可以在循環(huán)中使用
..<
來(lái)表示范圍。
var total = 0
for i in 0..<4 {
total += i
}
print(total)
- 使用
..<
創(chuàng)建的范圍不包含上界俭令,如果想包含的話需要使用...
后德。
var total = 0
for i in 0...100 {
total += i
}
print(total)