摘要:[Swift]Swift基礎語法
變數與常數
在Swift內的宣告可以分為兩種,宣告變數與宣告常數。變數是宣告後仍然可以改變,宣告時以var
開頭。常數則是宣告後不可以改變,宣告時以let
開頭。在Swift內,編譯器會進行型別推斷,所以可以不需要指定型別,直接給值。但給完值後,就不能再修改型別了。
變數
使用var
宣告一個簡單的整數變數,給予初始值後還可以修改值
var myVariable = 10
myVariable = 50
但是給予int
初始值後,再設定string
物件後,就會產生Error
var myVariable = 10
myVariable = "a"
會產生錯誤訊息: Cannot assign a value of type 'String' to a value of type 'Int'
常數
使用let
宣告一個簡單的整數常數
let myConstant = 20
如果想修改常數值,就會產生Error: Cannot assign to value: 'myConstant' is a 'let' constant
let myConstant = 20
myConstant = 30
指定型別的寫法
在變數名或常數名後加上:
,以指定型別
var myVariable: String = "Hello"
Function
使用func
關鍵字來宣告一個函式,使用->
來指定函式回傳型別。
func sayHello(personName: String) -> String {
let greeting = "Hello, " + personName + "!"
return greeting
}
print(sayHello("Anna"))
使用tuple來回傳多個值。
func callAPI(url: String) -> (Int, String) {
if(checkURL(url)){
return (200,"OK")
}
else{
return (500,"Error")
}
}
集合物件 - Arry & Dictionary & Tuples
使用方括號[]
來建立Array(陣列)或Dictionary(字典)物件,並使用索引值(index)或鍵值(key)來存取元素(elements)
Arry
//建立一個空的String Array
var arrayA = [String]()
//建立一個String Array,並給予初始值
var arrayB = ["BA","BB","BC"]
//使用append()增加一個元素到Array中
arrayA.append("A")
//使用 += 增加陣列到原始的陣列中
arrayA += ["B","C"]
//使用insert()插入一個元素
arrayA.insert("D",atIndex: 3)
//使用removeLast()移除最後一個元素
arrayA.removeLast()
//使用for 巡覽Array
for item in arrayA{
print(item)
}
//使用index取得Array元素
print(arrayA[1])
Dictionary
/建立一個空的Dictionary
var airports: Dictionary<String, String> = ["TYO": "Tokyo", "DUB": "Dublin"]
//另一種建立方式, key:String value: Int
var dicA = [String: Int]()
//建立一個Dictionary,並給予初始值
var dicB = ["EleA":10,"EleB":20]
//Key不存在則新增一個元素到Dictionary
dicB["EleC"] = 30
//key存在則修改該key值所指定的元素
dicB["EleC"] = 40
//設定nil以移除一個元素
dicB["EleC"] = nil
//使用for 巡覽Dictionary
for (dicKey, dicValue) in dicB{
print(dicValue)
}
for dicKey in dicB.keys{
print(dicKey)
}
for dicValue in dicB.values{
print(dicValue)
}
Tuples
tuples的宣告語法就是以()
把多個物件包起來成為一包,透過index就可以使用。因為可以包不同的型別,所以與Array, Dictionary有不同的使用情境。最常見的是如果function想回傳多個值,又不想大費周章的建立一個class時,就可以很簡單地用tuples來達到這個目的。
//建立一個由Int及String組合起來的tuple
let http404Error = (404, "Not Found")
//取得tuple的第一個元素
print(http404Error.0)
//取得tuple的第二個元素
print(http404Error.1)
//建立tuple時,命名個別元素
let http200Status = (statusCode:200, description:"OK")
//使用元素名來取值
print(http200Status.statusCode)
print(http200Status.description)
Subscript
Subscript應該是對應到C#中的Indexer,他可以使用在Class, Structure, Enum上
class BabyToy{
var toys = ["car","train"]
subscript(inder: Int) -> String{
get{
return toys[inder]
}
set{
toys[inder] = newValue
}
}
}
var toyObj = BabyToy()
//使用Subscript取值
print(toyObj[0])
//使用Subscript設值
toyObj[0] = "tiger"
流程控制
使用if
和switch
來進行條件操作,使用for-in
、for
、while
和do-while
來進行迴圈。包裹條件和迴圈變數的括號可以省略,但是語句體的大括號則不可以省略。
for 迴圈
for var index = 0; index < 3; ++index {
print("index is \(index)")
}
// index is 0
// index is 1
// index is 2
for - in 迴圈
例中用來進行遍歷的元素是一組使用閉區間運算子(...),表示的從1到5的數字。
for index in 1...5 {
print("\(index) 乘 5 = \(index * 5)")
}
while 迴圈
var index = 0
while(index<3){
print("index is \(index)")
index++
}
列舉
基本的使用方式
//宣告一個方位的enum
enum CompassPoint {
case North
case South
case East
case West
}
//建立一個CompassPoint型別的enum
var myDirection = CompassPoint.South
//使用switch判別enum內容
func showDirection(inDir: CompassPoint) -> String{
switch inDir{
case .North:
return "北"
default:
return "不是北"
}
}
print(showDirection(myDirection))
//output: 不是北
使用Raw Value
列舉可以設定Raw Value,需要指定其型別。如下例,Raw Value的型別是Int,可以設置第一個Raw Value,剩下的原始值會按照順序賦值。
可以用rawValue
屬性取得值,也可以由值再反轉為Enum
enum Planet: Int {
case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
print(Planet.Earth.rawValue)
//output: 3
var mercucyObj = Planet(rawValue: 1)
print(mercucyObj)
//output: Optional(Planet.Mercury)