關(guān)于Swift是如何產(chǎn)生的满俗,蘋果怎么看待這個等等,我在這里就不廢話了淋样。我寫這篇文章依據(jù)有部分網(wǎng)站的視頻講解狈定、官方的技術(shù)文檔、stackoverflow习蓬、一些技術(shù)博客纽什,我還是以一個技術(shù)小白的身份寫這篇文章,這篇文章對于我來說就是查漏補缺的作用,因為之前學(xué)過Swift躲叼,但是感覺不扎實芦缰。
1.二進(jìn)制、八進(jìn)制枫慷、十六進(jìn)制:前綴分別為0b
,0o
,0x
,舉個栗子
let decimalInt:Int = 17
let binaryInt:Int = 0b10001
let octalInt:Int = 0o21
let hexadecimalInt:Int = 0x11
2.數(shù)字的表達(dá)有一些注意
4.1 let bignum = 1_000_000
4.2強制轉(zhuǎn)換 let pi:Double = Double(Int(1.2))
3.注釋和分號:不強制使用分號让蕾,一行有多個語句需要使用分號分隔
4.Swift基本數(shù)據(jù)類型
4.1類型別名 typealias Vals = String
4.2nil 是個值,OC里的nil是個空指針
4.3可選類型Optional 可選值:或者是一個值或听,或者是沒有值
4.3.1嘆號(!)能確定可選值有值
4.3.2強制轉(zhuǎn)換不能使用可選值轉(zhuǎn)換
4.3.3Optional Binding:if let user = 可選值//已經(jīng)解包
4.5元組Tuples var tus = ("hello",1,2,"323")
let reg = (a:1,b:"hello") 訪問->reg.a
4.6可以使用下劃線忽略部分?jǐn)?shù)值
4.7字符和字符串
4.7.1 String 是值類型
4.7.2 初始化方式:var x = ""
或者var x = String()
4.7.3 isEmpty 判斷是否為空
4.7.4 全局函數(shù) countElements 求長度
4.7.5NSString 求長度 length
4.7.6 .hasPrefix 和 .hasSuffix
4.7.7 trim
var xc = " 123 2321 !! 2"
xc.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
println(xc.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()))
4.7.8 join
var xa = "~"
println(xa.join(["1989","05","31"]))
4.7.9 splice
var xb = "hello my name is xiaoming,what`s your name?"
println(xb.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " ")))
4.7.10 Index 和Range
var str = "hello my name is/////"
let startIndex = str.startIndex
let endIndex = advance(startIndex, 10)
let range = Range<String.Index>(start:startIndex,end:endIndex)
str.rangeOfString("nsme", options: NSStringCompareOptions.CaseInsensitiveSearch, range: range )
5.運算符
5.1 探孝??
a??b -> a!= nil ? a!: b
條件a解包之后的類型必須和b一樣;a必須是個可選值
6.for (index,item) in enumerate(array){}
7.switch 一些高級用法
7.1 可以判斷是不是在哪個區(qū)間 case 0...9
7.2 元組元素判斷 case (0,0)
,如果只想判斷一個元素是不是符合 case (_,0)
,判斷是不是在哪個區(qū)間case (0...9,3..<9)
7.3value binding case (let x,0)
7.4可以增加條件判斷 case let(x,y) where x==y
7.5判斷之后還想繼續(xù)判斷而不跳轉(zhuǎn)使用fallthrough
8.函數(shù)
8.1傳入的參數(shù)如果需要修改的話誉裆,稱為變量參數(shù)顿颅。需要加入var
關(guān)鍵字。 func setL(var num:Int) ->String
8.2inout參數(shù)足丢,加了inout
關(guān)鍵字的時候粱腻,可以改變外圍的數(shù)據(jù)的值,而不是僅僅在函數(shù)體執(zhí)行改變斩跌。
8.3閉包最基本的語法{(參數(shù)列表)->返回值 in 具體邏輯}
8.4閉包的簡寫
8.4.1 {(a,b) in 具體邏輯}
根據(jù)上下文判斷參數(shù)的類型和返回值類型绍些,所以可以省略
8.4.2 {(a,b) in 返回值表達(dá)式}
這里是考慮有返回值的情況,需要寫return的時候耀鸦,我們可以不用寫return柬批,但是有個前提是后面的邏輯必須只有一句話,還得有返回值
8.4.3 {$0 > $1}
8.4.4 >
直接這樣寫也可以,大于號代表著一個函數(shù)氮帐,而不是僅僅是個操作符而已锻霎。
8.5 trailing closure 尾隨閉包。在參數(shù)列表后面直接寫閉包揪漩。
var arr = [2,1,9,8,7,0,12,289,290,32,23,190] arr = sorted(arr){return $0>$1}
8.6捕獲值 在其定義的上下文中捕獲常量和變量旋恼,而且可以改變變量的值。
var arr = [2,1,9,8,7,0,12,289,290,32,23,190] var num = 9 arr = sorted(arr){num = 7;return $0-num > $1-num } println("num is \(num)")
最后num被改為7
8.7 非常重要的一點奄容,閉包是引用類型冰更。
9值類型和引用類型
9.1值類型:Int Float String Array Dictionary Tuple Bool
9.2引用類型:function closure
9.3 swift 沒有指針類型,引用的類型就是指向地址
10類
10.1 構(gòu)造函數(shù)
10.2 析構(gòu)函數(shù) deinit
10.3 類的繼承 會繼承構(gòu)造函數(shù)昂勒,屬性蜀细,方法
10.4 不能重寫的需要關(guān)鍵字:@final
11結(jié)構(gòu)體
11.1結(jié)構(gòu)體與類的相同和不同
相同:
1.都有變量和函數(shù)
2.都可以使用協(xié)議
3.都可以使用內(nèi)部下標(biāo)方式讀取屬性
4.都有初始化函數(shù)
不同:
1.類有繼承
2.類可以多重引用
3.類有析構(gòu)函數(shù),結(jié)構(gòu)體沒有
4.結(jié)構(gòu)體是值類型戈盈,類是引用類型