swift基礎

基本的數(shù)據(jù)結構

  • 使用var來聲明變量
  • let來聲明常量
    • 一個常量的值团南,在編譯的時候瞳收,并不需要有明確的值阿趁,但是你只能為它賦值一次
    • 用常量來表示這樣一個值:你只需要決定一次,但是需要使用很多次
  • 不用明確地聲明類型处硬,聲明的同時賦值的話,編譯器
    會自動推斷類型
  • 如果初始值沒有提供足夠的信息(或者沒有初始值)拇派,那你需要在變量后面聲明類型荷辕,用冒號分割,let explicitDouble: Double = 70
  • 值永遠不會被隱式轉換為其他類型件豌。如果你需要把一個值轉換成其他類型疮方,請顯式轉換
let label = "The width is"
let width = 94
let widthLabel = label + String(width)
  • 把值轉換成字符串的方法:\(),把值寫到括號中,并且在括號之前寫一個反斜杠

let apples = 3

let appleSummary = "I have (apples) apples."

  • 用方括號 [] 來創(chuàng)建數(shù)組和字典茧彤,并使用下標或者鍵(key)來訪問元素骡显,最后一個元素后面允許有個逗號
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
var occupations = [
   "Malcolm": "Captain",
   "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
  • 要創(chuàng)建一個空數(shù)組或者字典,使用初始化語法。

    let emptyArray = [String]()
    let emptyDictionary = [String: Float]() 
    
  • 可以用 [] 和 [:] 來創(chuàng)建空數(shù)組和空字典(不建議使用)


控制流

  • 使用 if 和 switch 來進行條件操作

  • 使用 for-in 蟆盐、 for 承边、 while 和 repeat-while 來進行循環(huán)

  • 包裹條件和循環(huán)變量括號可以省略,但是語句體的大括號是必須的

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 語句中石挂,條件必須是一個布爾表達式博助,**這意味著像 if score { ... } 這樣的代碼將報錯,而不會隱形地與 0 做對比**
- 是通過使用 ?? 操作符來提供一個默認值

  ```
  let nickName: String? = nil
  let fullName: String = "John Appleseed"
  let informalGreeting = "Hi \(nickName ?? fullName)"
  ```
- switch 支持任意類型的數(shù)據(jù)以及各種比較操作

let 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.")
}

- 行 switch 中匹配到的子句之后痹愚,程序會退出 switch 語句富岳,并不會繼續(xù)向下運行,**所以不需要在每個子句結尾寫 break**
- 你可以使用 for-in 來遍歷字典拯腮,需要兩個變量來表示每個鍵值對窖式。字典是一個無序的集合,所以他們的鍵和值以任意順序迭代結束
- 使用 while 來重復運行一段代碼直到不滿足條件动壤。**循環(huán)條件也可以在結尾萝喘,保證能至少循環(huán)一次**

var n = 2
while n < 100 {
n = n * 2
}
print(n)
var m = 2
repeat {
m = m * 2
} while m < 100
print(m)

- 可以在循環(huán)中使用 ..< 來表示范圍,也可以使用傳統(tǒng)的寫法琼懊,兩者是等價的

var firstForLoop = 0
for i in 0..<4 {
firstForLoop += i
}
print(firstForLoop)

- 使用 ..< 創(chuàng)建的范圍不包含上界阁簸,如果想包含的話需要使用 ...

---

## 函數(shù)和閉包

- 使用 func 來聲明一個函數(shù),使用名字和參數(shù)來調(diào)用函數(shù)哼丈。使用 -> 來指定函數(shù)返回值的類型

func greet(name: String, day: String) -> String {
return "Hello (name), today is (day)."
}
greet("Bob", day: "Tuesday")

- 使用元組來讓一個函數(shù)返回多個值启妹。該元組的元素可以用名稱或數(shù)字來表示。

func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
} else if score < min {
min = score
}
sum += score
}
return (min, max, sum)
}
let statistics = calculateStatistics([5, 3, 100, 3, 9])
print(statistics.sum)
print(statistics.2)

- 函數(shù)可以帶有可變個數(shù)的參數(shù)醉旦,這些參數(shù)在函數(shù)內(nèi)表現(xiàn)為數(shù)組的形式

func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)

- 函數(shù)可以嵌套饶米。被嵌套的函數(shù)可以訪問外側函數(shù)的變量,你可以使用嵌套函數(shù)來重構一個太長或者太復雜的函數(shù)

func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()

- 函數(shù)是第一等類型车胡,這意味著函數(shù)可以作為另一個函數(shù)的返回值

func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)

- 函數(shù)也可以當做參數(shù)傳入另一個函數(shù)

func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, condition: lessThanTen)


1. 函數(shù)實際上是一種特殊的閉包檬输。
2. 它是一段能之后被調(diào)用的代碼,閉包中的代碼能訪問閉包所建作用域中能得到的**變量和函數(shù)**
3. 使用 {} 來創(chuàng)建一個**匿名閉包**吨拍。使用 in 將參數(shù)和返回值與閉包函數(shù)體進行分離
4. 可以通過參數(shù)位置而不是參數(shù)名字來引用參數(shù)

---
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末褪猛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子羹饰,更是在濱河造成了極大的恐慌,老刑警劉巖碳却,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队秩,死亡現(xiàn)場離奇詭異,居然都是意外死亡昼浦,警方通過查閱死者的電腦和手機馍资,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來关噪,“玉大人鸟蟹,你說我怎么就攤上這事乌妙。” “怎么了建钥?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵藤韵,是天一觀的道長。 經(jīng)常有香客問我熊经,道長泽艘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任镐依,我火速辦了婚禮匹涮,結果婚禮上,老公的妹妹穿的比我還像新娘槐壳。我一直安慰自己然低,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布务唐。 她就那樣靜靜地躺著雳攘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绍哎。 梳的紋絲不亂的頭發(fā)上来农,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音崇堰,去河邊找鬼沃于。 笑死,一個胖子當著我的面吹牛海诲,可吹牛的內(nèi)容都是我干的繁莹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼特幔,長吁一口氣:“原來是場噩夢啊……” “哼咨演!你這毒婦竟也來了?” 一聲冷哼從身側響起蚯斯,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤薄风,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拍嵌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遭赂,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年横辆,在試婚紗的時候發(fā)現(xiàn)自己被綠了撇他。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖困肩,靈堂內(nèi)的尸體忽然破棺而出划纽,到底是詐尸還是另有隱情,我是刑警寧澤锌畸,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布勇劣,位于F島的核電站,受9級特大地震影響蹋绽,放射性物質發(fā)生泄漏芭毙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一卸耘、第九天 我趴在偏房一處隱蔽的房頂上張望退敦。 院中可真熱鬧,春花似錦蚣抗、人聲如沸侈百。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钝域。三九已至,卻和暖如春锭魔,著一層夾襖步出監(jiān)牢的瞬間例证,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工迷捧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留织咧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓漠秋,卻偏偏與公主長得像笙蒙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子庆锦,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容