swift _day1
未知知識(shí)點(diǎn)記錄
定義
var 聲明變量
let 聲明常量.官方解釋(一個(gè)常量的值,在編譯的時(shí)候,并不需要有明確的值,但是你只能為它賦值一次。也就是說(shuō)你可以用常量來(lái)表示這樣一個(gè)值:你只需要決定一次,但是需要使用很多次。)
常量或者變量的類型必須和你賦給它們的值一樣。然而,聲明時(shí)類型是可選的,聲明的同時(shí)賦值的話,編譯器會(huì)自動(dòng)推斷類型。
let numberInt = 10 //在賦值時(shí)系統(tǒng)推斷為int類型的
let numberDouble = 10.0 //同上
let numberDoubleAlso : Double = 10 //程序員定義為double類型
轉(zhuǎn)換
在swift中值永遠(yuǎn)不會(huì)被隱式轉(zhuǎn)換為其他類型。如果你需要把一個(gè)值轉(zhuǎn)換成其他類型,請(qǐng)顯式轉(zhuǎn)換。
let age: Int = 10
let name : String = "十萬(wàn)伏特"
let iam = name + String(age) //顯示轉(zhuǎn)換
//更加簡(jiǎn)單的轉(zhuǎn)換字符串的方式
let iamString = "我叫\(zhòng)(name)"
字典和數(shù)組
使用方括號(hào)[]來(lái)創(chuàng)建數(shù)組和字典,并使用下標(biāo)或者鍵(key)來(lái)訪問(wèn)元素。
let arr = ["my", "name", "is", "kyrie"]
let dic = ["name" : "kyrie", "age", "23"]
print(arr[1] + dic["name"]!)
//空數(shù)組 空字典
let emptyArr = [String]()
let emptyDic = [String : String]()
if and switch 等
for in循環(huán)
forin數(shù)組
let arr: [Int] = [1, 2, 3, 4, 5]
for number in arr {
print(number)
}
```
___
forin字典
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 (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
___
**if判斷**
在if語(yǔ)句中,條件必須是一個(gè)布爾表達(dá)式——這意味著像if score { ... }這樣的代碼將報(bào)錯(cuò),而不會(huì)隱形地與 0 做對(duì)比,但是在十萬(wàn)伏特中又有了另外一種形式。*你可以一起使用if和let來(lái)處理值缺失的情況。有些變量的值是可選的。一個(gè)可選的值可能是一個(gè)具體的值或者是nil,表示值缺失。在類型后面加一個(gè)問(wèn)號(hào)來(lái)標(biāo)記這個(gè)變量的值是可選的。* **注意在類型后面加一個(gè)問(wèn)號(hào)來(lái)標(biāo)記這個(gè)變量的值是可選的**
let name : String? = "kyrie"
if let otherName = name {
print("name - (otherName)")
} else {
print("name = nil")
}
```
當(dāng)name是有值的時(shí)候,if判斷的結(jié)果是true。
switch
十萬(wàn)伏特中的switch非常好用,switch支持任意類型的數(shù)據(jù)以及各種比較操作——不僅僅是整數(shù)以及測(cè)試相等。
let point = (x:1, y:2)
switch point {
case (1,3):
print("null")
case (_,2): //第一個(gè)就不用進(jìn)行判斷了
print("YES")
case let newPoint where newPoint.x == 1: //x是1的話就執(zhí)行
print("yes")
default: //default不能缺少
print("default")
}
```
**while、for循環(huán)**
你可以在循環(huán)中使用..<來(lái)表示范圍,也可以使用傳統(tǒng)的寫法,兩者是等價(jià)的,使用..<創(chuàng)建的范圍不包含上界,如果想包含的話需要使用...
for var i = 0 ; i < 10 ; i++ {
print(i)
}
for i in 1...10 {
/**
* i <= 10
/
print(i)
}
for i in 1..<10 {
/*
* i < 10
*/
print(i)
}
###函數(shù)和閉包
**函數(shù):**使用func來(lái)聲明一個(gè)函數(shù),使用名字和參數(shù)來(lái)調(diào)用函數(shù)。使用->來(lái)指定函數(shù)返回值。
func greet(name: String, day: String) -> String {
return "Hello (name), today is (day)."
}
greet("Bob",day: "Tuesday")
函數(shù)的參數(shù)和返回值可以是數(shù)組字典元祖等。**由于函數(shù)本身就是第一等類型,所以函數(shù)也可以作為函數(shù)的返回值和參數(shù)**
___
返回值是一個(gè)函數(shù)
func func3() -> (Int -> Int) {
func func4(number: Int) -> Int {
return number;
}
return func4
}
參數(shù)是一個(gè)函數(shù)
//參數(shù)
func func6(list: [Int], func5Use: String -> String) {
}
func func5(str: String) ->String {
return str
}
func6([6,7,8], func5Use: func5)
**閉包:**函數(shù)實(shí)際上是一種特殊的閉包,你可以使用{}來(lái)創(chuàng)建一個(gè)匿名閉包。使用in將參數(shù)和返回值類型聲明與閉包函數(shù)體進(jìn)行分離。
var bibao:((Int , Int) -> Int)
func funcblock() {
bibao = ({
(num1: Int, num2: Int) -> Int in
return num1 > num2 ? num1 :num2
})
}