




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1簡介今天凌晨Apple 剛剛發布了 Swift 編程語言,本文從其發布的書籍The Swift Programming Language中摘錄和提取而成。希望對各位的iOS&OSX 開發有所幫助。Swift 是供 iOS 和OS X 應用編程的新編程語言,基于 C 和Objective-C,而卻沒有 C 的一些兼容約束。Swift 采用了安全的編程模式和添加現代的功能來是的編程更加簡單、靈活和有趣。界面則基于廣受人民群眾愛戴的Cocoa 和Cocoa Touch 框架,展示了開發的新方向。Swift 已經存在了多年。Apple 基于已有的編譯器、調試器、框架作為其基礎架構。通過ARC(Aut
2、omatic Reference Counting,自動計數)的框架棧則一直基于 Cocoa。Objective-C 進化來簡化內存管理。支持了塊、collection literal 和模塊,允許現代語言的框架無需深入即可使用。(by gashero)感謝這些基礎工作,才使得可以在 Apple開發中引入新的編程語言。Objective-C 開發者會感到 Swift 的似曾相識。Swift 采用了Objective-C名參數和動態對象模型。提供了對 Cocoa 框架和 mix-and-match 的互操作性。基于這些基礎,Swift 引入了很多新功能和結合面向過程和面象的功能。Swift 對新
3、的程序員也是友好的。他是工業級品質的系統編程語言,卻又像語言一樣的友好。他支持 playground,允許程序員實驗一段Swift 代碼功能并立即看到結果,而無需麻煩的構建和運行一個應用。Swift 集成了現代編程語言,以及 Apple 工程文化的智慧。編譯器是按照性能優化的,而語言是為開發優化的,無需互相折中。(bygashero)可以從o, world開始學起并過渡到整個系統。所有這些使得Swift 成為Apple開發者創新的源泉。Swift 是編寫 iOS 和OSX 應用的夢幻方式,并且會持續推進新功能的引入。迫不及待的看到你用他來做點什么。2Swift 入門一個新語言的學習應該從打印o
4、, world開始。在 Swift,就是一行:prln(o, world)如果你寫過C 或Objective-C 代碼,這個語法看起來很熟悉,在Swift,這就是完整的程序了。你無需導入(import)一個單獨的庫供輸入輸出和字符串處理。全局范圍的代碼就是用于程序的,所以你無需編寫一個 main() 函數。你也無需在每個語句后寫分號。這個入門會給出足夠的信息教你完成一個編程任務。無需擔心你還不理解一些東西,所有沒解釋清楚的,會在本書后續詳細講解。Note作為最佳實踐,可以將本章在 Xcode 的playground 中打開。Playground 允許你編輯代碼并立即看到結果。3簡單值使用 le
5、t 來定義常量, var 定義變量。常量的值無需在編譯時指定,但是至少要賦值一次。這意味著你可以使用常量來命名一個值,你發現只需一次確定,卻用在多個地方。var myVariable = 42 myVariable = 50let myConstant = 42Notegashero 注記這里的常量定義類似于函數式編程語言中的變量,一次賦值后就無法修改。多多使用有益健康。一個常量或變量必須與賦值時擁有相同的類型。因此你不用嚴格定義類型。提供一個值就可以創建常量或變量,并讓編譯器推斷其類型。在上面例子中,編譯其會推斷 myVariable 是一個整數類型,因為其初始化值就是個整數。Notegas
6、hero 注記類型與變量名綁定,屬于靜態類型語言。有助于靜態優化。與、JavaScript 等有所區別。如果初始化值沒有提供足夠的信息(或沒有初始化值),可以在變量名后寫類型,以冒號分隔。let imliciteger = 70let imlicitDouble = 70.0let explicitDouble: Double = 70Note練習創建一個常量,類型為Float,值為 4。值不會隱含轉換到其他類型。如果你需要轉換一個值到不同類型,明確的構造一個所需類型的實例。let label = The width is let width = 94let widthLabel = labe
7、l + String(width)Note練習嘗試刪除最后一行的String 轉換,你會得到什么錯誤?還有更簡單的方法來在字符串中包含值:以小括號來寫值,并用反斜線()放在小括號之前。例如:let apples = 3let oranges = 5/by gasherolet appleSummary = I have (apples) apples. let fruitSummary = I have (apples + oranges)pieNote練習of fruit.使用 () 來包含一個浮點數計算到字符串,并包含的名字來問候。創建一個數組和字典使用方括號 ,其元素則是通過方括號中的索
8、引或鍵。var shop blue paList = catfish, water, tulips, shopList1 = bottle of watervar occupations = Malcolm: Captain, Kaylee: Mechanic,occupationsJayne = Public Relations要創建一個空的數組或字典,使用初始化語法:let emptyArray = String()let emptyDictionary = Dictionary()如果類型信息無法推斷,你可以寫空的數組為 和空的字典為:,例如你設置一個知道變量并傳入參數到函數:shopL
9、ist = /去購物并買些東西 by gashero4控制流使用 if 和 switch 作為條件控制。使用 for-in 、 for 、 while 、 do-while 作為循環。小括號不是必須的,但主體的大括號是必需的。let individualScores = 75, 43, 103, 87, 12 var teamScore = 0for score in individualScores if score 50 teamScores += else teamScores +=31teamScore在 if 語句中,條件必須是表達式,這意味著 if score . 是錯誤的,不能隱
10、含的與 0 比較。你可以一起使用 if 和 let 來防止值的丟失。這些值是可選的??蛇x值可以包含一個值或包含一個 nil 來指定值還不存在。寫一個問號? 在類型后表示值是可選的。var optionalString: String? = optionalString = nilovar optionalName: String? = John Appleseedvar greeting = o!if let name = optionalName greeting = o, (name)Note練習改變 optionalName 為nil 。在問候時會發生什么?添加一個else 子句在 op
11、tionalName 為nil 時設置一個不同的值。如果可選值為 nil ,條件就是 false 大括號中的代碼會被跳過。否則可選值未包裝并賦值為一個常量,會是的未包裝值的變量到代碼塊中。switch 支持多種數據以及多種比較,不限制必須是整數和測試相等。let vegetable = red pepper switch vegetable case celery:letment = Add some raisins andmake ants on a log.case cucumber, watercress:lettea sandwich.ment= t would make a good
12、case let x where x.haffix(pepper):= Is it a spicy (x)?let default:let in soup.Note練習ment/by gasheroment= Everything tastes good嘗試去掉 default ,看看得到什么錯誤。在執行匹配的情況后,程序會從 switch 跳出,而不是繼續執行下一個情況。所以不再需要 break 跳出 switch 。可使用 for-in 來迭代字典中的每個元素,提供一對名字來使用每個鍵值對。leterestingNumbers = Prime: 2, 3, 5, 7, 11, 13,Fib
13、onacci: 1, 1, 2, 3, 5, 8,Square: 1, 4, 9, 16, 25,var largest = 0for (kind, numbers) inerestingNumbers for number in numbers if number largest largest = numberNote練習添加另一個變量來哪個種類中的數字最大,也就是最大的數字所在的。使用 while 來重復執行代碼塊直到條件改變。循環的條件可以放在末尾來確保循環至少執行一次。var n = 2while n 100 n = n * 2nvar m = 2 do m = m * 2 whil
14、e m 100 m你可以在循環中保持一個索引,通過 . 來表示索引范圍或明確一個初始值、條件、增量。這兩個循環做相同的事情:var forForLoop = 0 i in 0.3 ForLoop += iForLoopvar forsecondForLoop = 0var i = 0; i 分隔參數的名字和返回值類型。func greet(name: String, day: String) - String return o (name), today is (day).greet(Bob, Tuesday)Note練習去掉 day 參數,添加一個參數包含今天的午餐選擇。使用元組(tuple
15、)來返回多個值。func getGasPri() - (Double, Double, return (3.59, 3.69, 3.79)Double)getGasPri()函數可以接受可變參數個數,收集到一個數組中。func sumOf(numbers: var sum = 0.) -for number in numbers sum += numberreturn sumsumOf()sumOf(42, 597, 12)Note練習編寫一個函數計算其參數的平均值。函數可以嵌套。內嵌函數可以其定義所在函數的變量。你可以使用內嵌函數來組織代碼,避免過長和過于復雜。func returnFift
16、een() - var y = 10func add() y += 5add() return y /by gashero returnFifteen()函數是第一類型的。這意味著函數可以返回另一個函數。func makeIncrementer() - (-) func addOne(number: return 1 + numberreturn addOne) -var increment = makeIncrementer() increment(7)一個函數可以接受其他函數作為參數。func hasAnyMatches(list: Bool) - Bool for item in lis
17、t if condition(item) return true, condition:-returnfalsefunc lessreturnnTen(number: number Bool var numbers = 20, 19, 7,12hasAnyMatches(numbers, lessnTen)函數實際是閉包的特殊情況。你可以寫一個閉包而無需名字,只需要放在大括號中即可。使用 in 到特定參數和主體的返回值。numbers.map(number:) -inlet result = 3 * number return result)Note練習重寫一個閉包來對所有奇數返回 0。編寫閉
18、包時有多種選項。當一個閉包的類型是已知時,例如代表回調,你可以忽略其參數和返回值,或兩者。單一語句的閉包可以直接返回值。numbers.map(number in 3 * number)你可以通過數字而不是名字來一個參數,這對于很短的閉包很有用。一個閉包傳遞其最后一個參數到函數作為返回值。sort(1, 5, 3, 12, 2) $0 $1 6對象與類使用 class 可以創建一個類。一個屬性的則是在類里作為常量或變量的,除了是在類的上下文中。方法和函數也是這么寫的。class Shvar numberOfSides = 0func simpleDescription() - String r
19、eturn A sh sides.Note練習with (numberOfSides)通過 let 添加一個常量屬性,以及添加另一個方法能接受參數。通過在類名后加小括號來創建類的實例。使用點語法來實例的屬性和方法。var sh= Sh()sh.numberOfSides = 7 var shDescription = sh.simpleDescription()這個版本的 Sh類有些重要的東西不在:一個構造器來在創建實例時設置類。使用 init 來創建一個。claamedShvar numberOfSides: var name: String= 0init(name: String) sel
20、 = name/by gasherofunc simpleDescription() - String return A Sh sides.with (numberOfSides)注意 self 用來區分 name 屬性和 name 參數。構造器的生命跟函數一樣,除了會創建類的實例。每個屬性都需要賦值,無論在里還是在構造器里。使用 deinit 來創建一個析構器,來執行對象銷毀時的工作。子類包括其超類的名字,以冒號分隔。在繼承標準根類時無需,所以你可以忽略超類。子類的方法可以通過標記 override 重載超類中的實現,而沒有 override 的會被編譯器看作是錯誤。編譯器也會檢
21、查那些沒有被重載的方法。class Square: NamedShvar sideLength: Doubleinit(sideLength: Double, name: String) self.sideLength = sideLength super.init(name: name)numberOfSides = 4func area() - Double return sideLength * sideLengthoverride func simpleDescription() - String return A square with sides of length(sideLen
22、gth).let test = Square(sideLength: 5.2, name: my test square)test.area() test.simpleDescription()Note練習編寫另一個 NamedSh的子類叫做 Circle ,接受半徑和名字到其構造器。實現 area 和 describe 方法。屬性可以有 getter 和 setter 。class EquilateralTriangle: NamedSh var sideLength: Double = 0.0init(sideLength: Double, name: String) self.sideL
23、ength = sideLength super.init(name: name) numberOfSides = 3var perimeter: Double get return 3.0* sideLengthset sideLength= newValue / 3.0override func return AnsimpleDescription() - String equilateral triangle with sidesof length (sideLength).var triangle = EquilateralTriangle(sideLength: 3.1, name:
24、 a triangle)triangle.perimeter triangle.perimeter = 9.9 triangle.sideLength在 perimeter 的 setter 中,新的值的名字就是 newValue 。你可以提供一個在 set 之后提供一個不的名字。變長。class TriangleAndSquare var triangle: EquilaterTriangle willSet square.sideLength = newValue.sideLengthvar square: Square willSet triangle.sideLength = newV
25、alue.sideLengthinit(size: Double, name: String) square = Square(sideLength: size, name:name)triangle = EquilaterTriangle(sideLength: size, name: name)var triangleAndSquare = TriangleAndSquare(size: 10, name: another test sh) triangleAndSquare.square.sideLength triangleAndSquare.triangle.sideLength t
26、riangleAndSquare.square = Square(sideLength: 50, name: larger square) triangleAndSquare.triangle.sideLength用 willSet 和 didSet 。例如,下面的類要保證其三角的邊長等于矩形的如果你不需要計算屬性,但是仍然要提供在設置值之后執行工作,使設置屬性的值調用超類的構造器改變超類定義的屬性的值,添加附加的工作來使用方法、getter、setter 也可以在這里注意 EquilateralTriangle 的構造器有 3 個不同的步驟:類的方法與函數有個重要的區別。函數的參數名僅用與函
27、數,但方法的參數名也可以用于調用方法(除了第一個參數)。缺省時,一個方法有一個同名的參數,調用時就是參數本身。你可以指定第二個名字,在方法。class Counter var count:= 0func incrementBy(amount:, numberOfTimestimes:) count += amount * timesvar counter = Counter() counter.incrementBy(2, numberOfTimes: 7)當與可選值一起工作時,你可以寫 ? 到操作符之前類似于方法屬性。如果值在?之前就已經是 nil ,所有在 ? 之后的都會自動忽略,而整個表
28、達式是 nil 。另外,可選值是未包裝的,所有 ? 之后的都作為未包裝的值。在兩種情況中,整個表達式的值是可選值。let optionalSquare: Square? = Square(sideLength: 2.5, name: optional square)let sideLength = optionalSquare?.sideLength7枚舉與結構使用 enum 來創建枚舉。有如類和其名類型,枚舉可以有方法。enum R:case Ace = 1case Two, Three, Four, Five, Six, Seven, Eight,Nine, Tencase Jack, Q
29、ueen, Kingfunc simpleDescrition() - String switch self case .Ace:return ace case .Jack:return jackcase .Queen: return queencase .King:return king default:return String(self.toRaw()let ace = R.Ace/by gasherolet aceRawValue = ace.toRaw()Note練習編寫一個函數比較兩個 R的值,通過比較其原始值。在如上例子中,原始值的類型是所以可以只指定第一個原始值。其后的原始值都
30、是按照順序賦值的。也可以使用字符串或浮點數作為枚舉的原始值。使用 toRaw 和 fromRaw 函數可以轉換原始值和枚舉值。if let convertedR= R.fromRaw(3) let threeDescription =convertedR.simpleDescription()枚舉的成員值就是實際值,而不是其他方式寫的原始值。實際上,有些情況是原始值,就是你不提供的時候。enum Suit case Spades, Hearts, Diamonds, Clubs func simpleDescription() - String switch self case .Spades:return spades case .Hearts:return hearts case .Diamonds:return dismonds case .Clubs:return clubslet hearts = Suit.Hearts/by gasherolet heartsDescription = hearts.simpleDescription()Note練習添加一個 color 方法到 Suit并在 spades 和 clubs 時返回 black ,并且給 hearts 和 diamounds返回 red 。注意上面Hearts 成員的兩種方法:當賦值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年小班配班個人工作方案
- 2025年高校生社團工作方案演講稿
- 汽車使用與維護 課件 1.1.2 車輛銘牌及VIN碼的識別
- PHP程序設計項目化教程電子教案4 匯率計算器-流程控制
- 2025年電子控制鎖項目可行性研究報告
- 2025年電動鉗項目可行性研究報告
- 2025年物流信息管理系統項目可行性研究報告
- 2025年煤磨防爆防靜電袋式收塵器項目可行性研究報告
- 興義民族師范學院《基礎醫學實驗(一)》2023-2024學年第二學期期末試卷
- 湖南省華容縣2025屆中考考前沖刺必刷卷(二)物理試題含解析
- YAMAHA(雅馬哈)貼片機編程培訓教材
- 液壓泵站、油缸壓力流量速度推力功率選型計算
- 2024年互聯網營銷師(高級)職業鑒定理論考試題庫(含答案)
- 登桿作業方案
- 河北省2024-2025學年高三省級聯測考試+化學試卷答案
- 信息技術必修一《數據與計算》第四章第一節《體驗計算機視覺應用》教案
- 三年級下冊道德與法治4.【說課稿】《同學相伴》人教部編版
- 圓周角與圓心角的關系 說課 課件2023-2024學年北師大版九年級數學下冊
- 2023年河南農業職業學院招聘考試真題
- 借用資質協議2024年
- 2022年全國機關事務管理研究會(中國機關后勤雜志社)招聘筆試歷年典型考題及考點剖析附帶答案詳解
評論
0/150
提交評論