SlideShare a Scribd company logo
Swift讀書會#1
2018/03/03
Natalie
Swift基礎語法+
Xcode開發環境介紹
Swift Basics
型別
集合
函式
流程控制
Class
Swift Basics
S w i f t
Types Variables Strings
Function if/
Switch
LoopsClass
Arrays
Dictionary
V a r i a b l e
•宣告變數的語法格式:
var nameOfVariable = "Value of Variable”
• 注意⼤大⼩小寫不⼀一樣
var a = 5
a == A // false
•可以在⼀一⾏行行定義多個變數或常數,⽤用逗號隔開
var b = 2, c = 8, d = 8
b + c + d //18
N a m i n g V a r i a b l e s
• ⾸首字元:⼤大寫或⼩小寫的字⺟母 A 到 Z、底線 

• ⾸首字元之後可使⽤用數字和 Unicode 字元組合

• 不能使⽤用Swift關鍵字、數學符號、箭頭、標點字符、連線與
制表字元(box-drawing characters)
• 嚴格區分⼤大⼩小寫,⼤大⼩小寫不同視作不同命名

• 最好選擇有意義的英⽂文單詞
T y p e I n f e r e n c e
Swift 不⽤用明確設置變數或常數的類類型,因為編譯器能從左邊的值推測⾃自動推
斷出右邊的變數或常數的型別
•Type Inference (型別推斷): 不⽤用宣告型別 -> 隱式宣告
•Type annotation(型別標注): 說明要儲存的值的型別-> 顯式宣告
以下宣告⽅方式顯式與隱式意義相同:
var num1 = 123 // num1 會被推測為Int型別
var num2: Int = 123
var double1 = 3.14 // double1 會被推測為Double型別,選擇浮點數的型別時,
Swift 會選擇Double⽽而不是Float
var double2: Double = 3.14
var pi = 3 + 0.1415 // 表達式中出現了了⼀一個浮點數字⾯面量量,所以表達式會被推斷為Double
型別
T y p e S a f e t y
在編譯的時候,變數或常數並不需要有明確的值,可只宣告名稱
但在使⽤用前必須給初值
型別⼀一旦決定就無法⾃自動轉換
型別不同不能直接⼀一起處理理
型別轉換:必須顯式指定型別
var number3 = 1234 // Type: Int
var intToStr = String(number3) // Type: String
C o n s t a n t
•永遠不會被更更動的資料料宣告為常數
•使⽤用let來來宣告常數,使⽤用var來來宣告變數
•宣告後不能將常數與變數進⾏行行互轉
var A = 1
A = 2
let B = 3
B = 4 // Cannot assign to value: 'B' is a 'let' constant. (只能賦值⼀一次)
T y p e s
• Int 或 UInt - ⽤用於整數,其中作為UInt⽤用來來定義無符號整數的整數
• Float - ⼀一般⽤用於使⽤用較⼩小的浮點值(⼩小數點數字)

例例如:3.14159, 1.23
• Double - ⽤用於較⼤大的浮點值。 

 例例如: 3.1415925359
• Bool - 代表⼀一個布林林值,true or false

• String - 這是有序字符集合。例例如: "Hello, World!"

• Character - ⽤用來來表示⼀一個單字符。例例如: "C"

• Optional - 這表示可以容納⼀一個值或沒有任何值的Variables

T y p e s
• Int 或 UInt - ⽤用於整數,其中作為UInt⽤用來來定義無符號整數的整數
• Double - ⽤用於較⼤大的浮點值。 

•Float - ⼀一般⽤用於使⽤用較⼩小的浮點值(⼩小數點數字)
• Bool - 代表⼀一個布林林值,真或假。
• String - 這是有序字符集合
O p t i o n a l  
Optional可以容納⼀一個值或沒有任何值的Variables
Optional有兩兩種狀狀態:⼀一個是空無⼀一物、⼀一個就是型別的值
宣告:
型別後⾯面加上問號?表示變數是個 Optional
型別與?間不可留留空⽩白
Optional 預設值為nil,宣告後不賦值即設為預設值
O p t i o n a l  
C o l l e c t i o n s
Array
->⼀一組有序排列列的資料料
Dictionary
-> ⼀一組由<鍵,值>組合的資料料,資料料不依序儲存,依照<鍵>索
引<值>效率⾼高於其他集合型別
Set
-> ⼀一組不重複的資料料,資料料不依序儲存
A r r a y
Array由⼀一對中括號[]組成,裡⾯面定義元素
使⽤用[]加上位置對某元素取值
[]搭配=設定(取代)某元素
[]搭配 Range Operator 定義特定範圍的元素
var array = [1, 3, 5]
array[0] //return: 1
array[0] = 0 //return: 0
array //return: [0, 3, 5]
array[1...2] = [1, 2] //return: [1, 2]
array //return: [0, 1, 2]
A r r a y
Array型別⼀一旦決定就不能變更更,設定不同型別的資料料會
造成編譯錯誤
存取超出範圍也會造成編譯錯誤
• 藉由=右邊的值組推測 Array 型別 (Type Inference)
• 明確在[、]之間宣告儲存資料料的型別
• 使⽤用 Generic ⽅方式在< >之間宣告 Array 元素的型別
A r r a y
D i c t i o n a r y
• Dictionary 由⼀一對中括號[]構成,裡⾯面的元素以
<key>:<value>⽅方式存放
• 藉由=右邊的值組推測 Dictionary 型別 (Type Inference)
• 明確在[、]之間宣告儲存資料料的型別
• 使⽤用 Generic ⽅方式在<、>之間宣告 Dictionary 元素的型別
var dict1 = [String:Int]()
var dict2: [String:Int] = [:]
var dict3: Dictionary<String, Int>
var dict4 = ["Dog": 3, "Cat": 5, "Rabbit": 2]
var dict5: [String:Int] = ["Dog": 3, "Cat": 5, "Rabbit": 2]
var dict6: Dictionary<String, Int> = ["Dog": 3, "Cat": 5,
"Rabbit": 2]
D i c t i o n a r y
• 使⽤用[<key>]對某元素取值。
• [<key>]搭配=設定(取代)某元素。
O p e r a t o r s
C o n t r o l F l o w
I f
if 條件 {

執⾏行行程式碼

}
I f
判斷結果必須是Bool
I f . . e l s e
if 條件 {

執⾏行行程式碼

} else {

執⾏行行程式碼

}
I f … e l s e i f … e l s e
if 條件 {

執⾏行行程式碼

} else if {

執⾏行行程式碼

} else {

執⾏行行程式碼

}
S w i t c h
W h i l e L o o p s
while 條件 {

執⾏行行程式碼

}
F o r - i n L o o p s
For item in Collection{

執⾏行行程式碼

}
F u n c t i o n
Function 的格式: 使⽤用func關鍵字定義 Function,接著宣告
Function 名稱,然後使⽤用()宣告參參數列列表,如果有回傳值則使⽤用->宣告
回傳值的型別
func functionName (parameterName: parameterType) -> returnType {
statements to execute
return object
}
F u n c t i o n
C l a s s
C l a s s
C l a s s
C l a s s
I n i t i a l i z a t i o n
S w i f t
Classes
class myClass:someSuperClass {
var myProperty:Int? //
properties

override init() {
myProperty = 12 } //methods
}
Function
func simpleFunction(){
ab}
func funcWithParamAndReturn
(a:Int, b: Int) -> Int { return
a+b }
If…else
if birthYear == 1992 ||
birthYear == 1980 || birthYear
== 1968 {
print("monkey")
} else if birthYear == 1991 ||
birthYear == 1979 || birthYear
== 1967 {
print("goat")
} else {
print("other animal")
}
let iAmAConstant : Int = -42
var iAmAVariable : Int = 23
iAmAVariable = 46
var inferredVariable = "I'm a string"
var optionalString:String? = nil
Strings
let helloString = "Hello", worldString =
" World"
let combinedString = helloString +
worldString
let combinedString2 = "(helloString ) +
(worldString)"
Variables
Arrays
var array = [1, 3, 5]
array[0] = 0
array = array + [5, 6]
array.append(9)
array.count
array[1...3]
array.reverse()
array.isEmpty
Int 

Float

Double

Bool 

String
1, 45, 589

1.23, 3.14159 

3.1415925359 

True, False 

“Angel”, “天使”
Types
Switch
switch birthYear {
case 1992, 1980, 1968:
print("monkey")
case 1991,1979,1967:
print("goat")
default:
print("other animal.)
}
Dictionary
var dict: [String: Int] =
[“⼀一”: 1, “⼆二”: 2]
dict["⼀一"] = nil //delete
dict["三"] = 3 //dadd
實作時間
Product Name:你的 App 的名稱

Team:先跳過此步驟

Organization Name:你的組織名稱

如果你是為某個公司單位開發 App,則你也可以使⽤用你公司單位的名字

Organization Identifier:網域名稱,但要倒過來來寫

假如你有⾃自⼰己申請的網域,你可以填入⾃自⼰己的網域名稱,若若是沒有的話,你也可以使⽤用
「com.」。舉例例來來說,你的名字叫做 Xiaoming,你可以這在 Organization Identifier 這裡輸入
「com.xiaoming」

Bundle Identifier: App 在送審時所使⽤用的唯⼀一識別碼

不需要輸入這個選項,Xcode 會⾃自動產⽣生

Language:Swift — Xcode ⽀支援 Objective-C 與 Swift

Use Core Data:不⽤用勾選

Include Unit Tests:不⽤用勾選

Include UI Tests:不⽤用勾選
Xcode
Xcode
BMI Calculator APP
實作時間
	 1.	建構畫⾯面:UILabel + UItextfield +
UIbutton 

	 2.	與controller 連接:IBOutlet / IBAction

	 3.	Optional checking : if let / guard 

	 4.	設立BMI算式

	 5.	把結果回傳畫⾯面

	 6.	判斷BMI是否過重

	 7.	把結果回傳畫⾯面

8. Reset button
建構畫⾯面
與controller 連接
Optional checking
BMI算式
BMI值計算公式:    
BMI = 體重(公⽄) / 身⾼2(公尺2)
例如:⼀個52公⽄的⼈,身⾼是155
公分,則BMI為 :
52(公⽄斤)/1.552 ( 公尺2 )= 21.6
BMI算式
BMI判斷
BMI判斷
Reset Button
END

More Related Content

PDF
Js is js(程劭非) (1)
PPTX
Scala+RDD
PPT
2011中正資管學術部講座 Java-Object
PPTX
Scala+spark 2nd
PDF
Python learn guide
PPT
JQuery Plugin
PPTX
jQuery源码学习
PPTX
3, operators
Js is js(程劭非) (1)
Scala+RDD
2011中正資管學術部講座 Java-Object
Scala+spark 2nd
Python learn guide
JQuery Plugin
jQuery源码学习
3, operators

What's hot (11)

PPTX
Scala再探
PDF
Python元組,字典,集合
PDF
C語言標準輸出入函式
PPTX
0710 php學習進度(1)
PDF
進階主題
PDF
Python串列資料應用
PPT
Chap 07
PPTX
C++基礎程式設計 ch3 條件判斷
PDF
Sql培训 (1)
PDF
Java 開發者的函數式程式設計
PDF
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
Scala再探
Python元組,字典,集合
C語言標準輸出入函式
0710 php學習進度(1)
進階主題
Python串列資料應用
Chap 07
C++基礎程式設計 ch3 條件判斷
Sql培训 (1)
Java 開發者的函數式程式設計
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
Ad

Similar to Swift基礎 (20)

PPT
PDF
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
PDF
Swift编程语言入门教程 中文版
PPT
Scala
PPT
第三章 栈和队列
KEY
Scala
PDF
JCConf 2023 - 深入淺出 Java 21 功能
PDF
Arrays的Sort算法分析
PDF
第四章
PDF
Arduino程式快速入門
PDF
functional-scala
PDF
C語言陣列與字串
PDF
Maintainable PHP Source Code
PDF
Ppt 78-100
PDF
Ppt 78-100
ODP
Erlang培训
PPT
PHP
PPTX
Python入門:5大概念初心者必備
PDF
JavaScript 快速複習 2017Q1
PPT
C程式-函式與巨集
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Swift编程语言入门教程 中文版
Scala
第三章 栈和队列
Scala
JCConf 2023 - 深入淺出 Java 21 功能
Arrays的Sort算法分析
第四章
Arduino程式快速入門
functional-scala
C語言陣列與字串
Maintainable PHP Source Code
Ppt 78-100
Ppt 78-100
Erlang培训
PHP
Python入門:5大概念初心者必備
JavaScript 快速複習 2017Q1
C程式-函式與巨集
Ad

Swift基礎

  • 4. S w i f t Types Variables Strings Function if/ Switch LoopsClass Arrays Dictionary
  • 5. V a r i a b l e •宣告變數的語法格式: var nameOfVariable = "Value of Variable” • 注意⼤大⼩小寫不⼀一樣 var a = 5 a == A // false •可以在⼀一⾏行行定義多個變數或常數,⽤用逗號隔開 var b = 2, c = 8, d = 8 b + c + d //18
  • 6. N a m i n g V a r i a b l e s • ⾸首字元:⼤大寫或⼩小寫的字⺟母 A 到 Z、底線 • ⾸首字元之後可使⽤用數字和 Unicode 字元組合 • 不能使⽤用Swift關鍵字、數學符號、箭頭、標點字符、連線與 制表字元(box-drawing characters) • 嚴格區分⼤大⼩小寫,⼤大⼩小寫不同視作不同命名 • 最好選擇有意義的英⽂文單詞
  • 7. T y p e I n f e r e n c e Swift 不⽤用明確設置變數或常數的類類型,因為編譯器能從左邊的值推測⾃自動推 斷出右邊的變數或常數的型別 •Type Inference (型別推斷): 不⽤用宣告型別 -> 隱式宣告 •Type annotation(型別標注): 說明要儲存的值的型別-> 顯式宣告 以下宣告⽅方式顯式與隱式意義相同: var num1 = 123 // num1 會被推測為Int型別 var num2: Int = 123 var double1 = 3.14 // double1 會被推測為Double型別,選擇浮點數的型別時, Swift 會選擇Double⽽而不是Float var double2: Double = 3.14 var pi = 3 + 0.1415 // 表達式中出現了了⼀一個浮點數字⾯面量量,所以表達式會被推斷為Double 型別
  • 8. T y p e S a f e t y 在編譯的時候,變數或常數並不需要有明確的值,可只宣告名稱 但在使⽤用前必須給初值 型別⼀一旦決定就無法⾃自動轉換 型別不同不能直接⼀一起處理理 型別轉換:必須顯式指定型別 var number3 = 1234 // Type: Int var intToStr = String(number3) // Type: String
  • 9. C o n s t a n t •永遠不會被更更動的資料料宣告為常數 •使⽤用let來來宣告常數,使⽤用var來來宣告變數 •宣告後不能將常數與變數進⾏行行互轉 var A = 1 A = 2 let B = 3 B = 4 // Cannot assign to value: 'B' is a 'let' constant. (只能賦值⼀一次)
  • 10. T y p e s • Int 或 UInt - ⽤用於整數,其中作為UInt⽤用來來定義無符號整數的整數 • Float - ⼀一般⽤用於使⽤用較⼩小的浮點值(⼩小數點數字)
 例例如:3.14159, 1.23 • Double - ⽤用於較⼤大的浮點值。 
  例例如: 3.1415925359 • Bool - 代表⼀一個布林林值,true or false
 • String - 這是有序字符集合。例例如: "Hello, World!"
 • Character - ⽤用來來表示⼀一個單字符。例例如: "C"
 • Optional - 這表示可以容納⼀一個值或沒有任何值的Variables

  • 11. T y p e s • Int 或 UInt - ⽤用於整數,其中作為UInt⽤用來來定義無符號整數的整數 • Double - ⽤用於較⼤大的浮點值。 
 •Float - ⼀一般⽤用於使⽤用較⼩小的浮點值(⼩小數點數字) • Bool - 代表⼀一個布林林值,真或假。 • String - 這是有序字符集合
  • 12. O p t i o n a l   Optional可以容納⼀一個值或沒有任何值的Variables Optional有兩兩種狀狀態:⼀一個是空無⼀一物、⼀一個就是型別的值 宣告: 型別後⾯面加上問號?表示變數是個 Optional 型別與?間不可留留空⽩白 Optional 預設值為nil,宣告後不賦值即設為預設值
  • 13. O p t i o n a l  
  • 14. C o l l e c t i o n s Array ->⼀一組有序排列列的資料料 Dictionary -> ⼀一組由<鍵,值>組合的資料料,資料料不依序儲存,依照<鍵>索 引<值>效率⾼高於其他集合型別 Set -> ⼀一組不重複的資料料,資料料不依序儲存
  • 15. A r r a y Array由⼀一對中括號[]組成,裡⾯面定義元素 使⽤用[]加上位置對某元素取值 []搭配=設定(取代)某元素 []搭配 Range Operator 定義特定範圍的元素 var array = [1, 3, 5] array[0] //return: 1 array[0] = 0 //return: 0 array //return: [0, 3, 5] array[1...2] = [1, 2] //return: [1, 2] array //return: [0, 1, 2]
  • 16. A r r a y Array型別⼀一旦決定就不能變更更,設定不同型別的資料料會 造成編譯錯誤 存取超出範圍也會造成編譯錯誤 • 藉由=右邊的值組推測 Array 型別 (Type Inference) • 明確在[、]之間宣告儲存資料料的型別 • 使⽤用 Generic ⽅方式在< >之間宣告 Array 元素的型別
  • 17. A r r a y
  • 18. D i c t i o n a r y • Dictionary 由⼀一對中括號[]構成,裡⾯面的元素以 <key>:<value>⽅方式存放 • 藉由=右邊的值組推測 Dictionary 型別 (Type Inference) • 明確在[、]之間宣告儲存資料料的型別 • 使⽤用 Generic ⽅方式在<、>之間宣告 Dictionary 元素的型別 var dict1 = [String:Int]() var dict2: [String:Int] = [:] var dict3: Dictionary<String, Int> var dict4 = ["Dog": 3, "Cat": 5, "Rabbit": 2] var dict5: [String:Int] = ["Dog": 3, "Cat": 5, "Rabbit": 2] var dict6: Dictionary<String, Int> = ["Dog": 3, "Cat": 5, "Rabbit": 2]
  • 19. D i c t i o n a r y • 使⽤用[<key>]對某元素取值。 • [<key>]搭配=設定(取代)某元素。
  • 20. O p e r a t o r s
  • 21. C o n t r o l F l o w
  • 22. I f if 條件 { 執⾏行行程式碼 }
  • 24. I f . . e l s e if 條件 { 執⾏行行程式碼 } else { 執⾏行行程式碼 }
  • 25. I f … e l s e i f … e l s e if 條件 { 執⾏行行程式碼 } else if { 執⾏行行程式碼 } else { 執⾏行行程式碼 }
  • 26. S w i t c h
  • 27. W h i l e L o o p s while 條件 { 執⾏行行程式碼 }
  • 28. F o r - i n L o o p s For item in Collection{ 執⾏行行程式碼 }
  • 29. F u n c t i o n Function 的格式: 使⽤用func關鍵字定義 Function,接著宣告 Function 名稱,然後使⽤用()宣告參參數列列表,如果有回傳值則使⽤用->宣告 回傳值的型別 func functionName (parameterName: parameterType) -> returnType { statements to execute return object }
  • 30. F u n c t i o n
  • 31. C l a s s
  • 32. C l a s s
  • 33. C l a s s
  • 34. C l a s s
  • 35. I n i t i a l i z a t i o n
  • 36. S w i f t Classes class myClass:someSuperClass { var myProperty:Int? // properties
 override init() { myProperty = 12 } //methods } Function func simpleFunction(){ ab} func funcWithParamAndReturn (a:Int, b: Int) -> Int { return a+b } If…else if birthYear == 1992 || birthYear == 1980 || birthYear == 1968 { print("monkey") } else if birthYear == 1991 || birthYear == 1979 || birthYear == 1967 { print("goat") } else { print("other animal") } let iAmAConstant : Int = -42 var iAmAVariable : Int = 23 iAmAVariable = 46 var inferredVariable = "I'm a string" var optionalString:String? = nil Strings let helloString = "Hello", worldString = " World" let combinedString = helloString + worldString let combinedString2 = "(helloString ) + (worldString)" Variables Arrays var array = [1, 3, 5] array[0] = 0 array = array + [5, 6] array.append(9) array.count array[1...3] array.reverse() array.isEmpty Int Float Double Bool String 1, 45, 589 1.23, 3.14159 3.1415925359 True, False “Angel”, “天使” Types Switch switch birthYear { case 1992, 1980, 1968: print("monkey") case 1991,1979,1967: print("goat") default: print("other animal.) } Dictionary var dict: [String: Int] = [“⼀一”: 1, “⼆二”: 2] dict["⼀一"] = nil //delete dict["三"] = 3 //dadd
  • 38. Product Name:你的 App 的名稱 Team:先跳過此步驟 Organization Name:你的組織名稱 如果你是為某個公司單位開發 App,則你也可以使⽤用你公司單位的名字 Organization Identifier:網域名稱,但要倒過來來寫 假如你有⾃自⼰己申請的網域,你可以填入⾃自⼰己的網域名稱,若若是沒有的話,你也可以使⽤用 「com.」。舉例例來來說,你的名字叫做 Xiaoming,你可以這在 Organization Identifier 這裡輸入 「com.xiaoming」 Bundle Identifier: App 在送審時所使⽤用的唯⼀一識別碼 不需要輸入這個選項,Xcode 會⾃自動產⽣生 Language:Swift — Xcode ⽀支援 Objective-C 與 Swift Use Core Data:不⽤用勾選 Include Unit Tests:不⽤用勾選 Include UI Tests:不⽤用勾選 Xcode
  • 39. Xcode
  • 40. BMI Calculator APP 實作時間 1. 建構畫⾯面:UILabel + UItextfield + UIbutton 2. 與controller 連接:IBOutlet / IBAction 3. Optional checking : if let / guard 4. 設立BMI算式 5. 把結果回傳畫⾯面 6. 判斷BMI是否過重 7. 把結果回傳畫⾯面
 8. Reset button
  • 44. BMI算式 BMI值計算公式:     BMI = 體重(公⽄) / 身⾼2(公尺2) 例如:⼀個52公⽄的⼈,身⾼是155 公分,則BMI為 : 52(公⽄斤)/1.552 ( 公尺2 )= 21.6
  • 49. END