Swift 基本語法練習

Swift 教學網站:https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html

基本語法

宣告變數

//宣告一個變數
var myVariable=123
//宣告一個字串
let label = "This width is"
let width = 94
let widthLabel = label + String(width)
//將變數包在字串裡面
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples"
//建立一個陣列
var shoppings = ["catfish", "water"]
//建立一個字典
var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
//調用字典內容
occupations["Jayne"] = "Public Relations"
//建立一個空陣列
let emptyArray = [String]()
//建立一個空字典
let emptyDictionary = [String: Float]()

控制項

//基本IF判斷
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}

//特殊用法
var optionalString: String? = "Hello"
print(optionalString == nil)
// Prints "false"

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName { //如果有值就成立,沒有值就離開
    greeting = "Hello, \(name)"
}
//Switch Case 用法(不用寫 case )
let vegetable = "red pepper"
switch vegetable {
case "celery":
    print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
    print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
    print("Is it a spicy \(x)?")
default:
    print("Everything tastes good in soup.")
}
//foreach 用法
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)
//連續索引值
var total = 0
for i in 0..<4 { //會產生 0, 1, 2, 3
    total += i
}
print(total)

函數

//基本函數
func greet(person: String, day: String) -> String {
    return "Hello \(person), today is \(day)."
}
greet(person: "Bob", day: "Tuesday")
//帶有回傳值的函數
func greet(_ person: String, on day: String) -> String {
    return "Hello \(person), today is \(day)."
}
greet("John", on: "Wednesday")
//多個回傳值的函數
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) { 
  //傳入一個 int 型態的陣列,回傳三個 int 型態的變數 min, max, sum
    var min = scores[0]
    var max = scores[0]
    var sum = 0

    for score in scores {
        if score > max {
            max = score
        } else if score < min {
            min = score
        }
        sum += score
    }

    return (min, max, sum)
}
let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9])
print(statistics.sum)
// Prints "120"
print(statistics.2)
// Prints "120"

//回傳一個函數
func makeIncrementer() -> ((Int) -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)

類別與物件

//基礎類別
class Shape {
    var numberOfSides = 0
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}
//實例化這個類別
var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()

//建立帶有初始化的類別
class NamedShape {
    var numberOfSides: Int = 0
    var name: String

    init(name: String) {
        self.name = name
    }

    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

//繼承
class Square: NamedShape {
    var sideLength: Double

    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 4
    }

    func area() -> Double {
        return sideLength * sideLength
    }

    override func simpleDescription() -> String {
        return "A square with sides of length \(sideLength)."
    }
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()

//定義 getter 跟 setter(保護變數不會被亂改'變更數值)
class EquilateralTriangle: NamedShape {
    var sideLength: Double = 0.0

    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 3
    }

    var perimeter: Double {
        get {
            return 3.0 * sideLength
        }
        set {
            sideLength = newValue / 3.0
        }
    }

    override func simpleDescription() -> String {
        return "An equilateral triangle with sides of length \(sideLength)."
    }
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
print(triangle.perimeter)
// Prints "9.3"
triangle.perimeter = 9.9
print(triangle.sideLength)
// Prints "3.3000000000000003"

結構與列舉

//基本的列舉,將一些常用的詞以及數字用一定的變數包裝起來,使程式碼的可讀性提高
enum Rank: Int {
    case ace = 1
    case two, three, four, five, six, seven, eight, nine, ten
    case jack, queen, king

    func simpleDescription() -> String {
        switch self {
        case .ace:
            return "ace"
        case .jack:
            return "jack"
        case .queen:
            return "queen"
        case .king:
            return "king"
        default:
            return String(self.rawValue)
        }
    }
}
let ace = Rank.ace
let aceRawValue = ace.rawValue

錯誤處理

//相當於 try-catch
do {
    let printerResponse = try send(job: 1040, toPrinter: "Bi Sheng")
    print(printerResponse)
} catch {
    print(error)
}
// Prints "Job sent"

終端機練習

開啟 Xcode,選擇 Get started with a playground

選擇 Blank 然後按 Next

放在桌面就行,按下 Create

輸入以下程式碼測試

var total = 0
for i in 0..<10 {
    total += i
}
print(total)

按下最下面的播放按鍵執行程式

答案顯示45即成功.

練習

新增一個專案名稱叫 Hello Worldv2 (詳細專案設定前往:Hello World iOS App

加入一個按鈕,將文字輸入 Hello World

同樣將版面分為兩邊

新增這個按鈕的方法,將 Connection 選為 Action,名字輸入 showMessage 後按下 Connect

在這個函數裡面輸入以下程式碼

let alertController = UIAlertController(title: "Welcome to my First App", message: "Hello World" , preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        present(alertController, animated: true, completion: nil)

然後按下執行虛擬機

按下中間的 Hello World 試試看

跳出這個畫面即成功

SHXJ
Latest posts by SHXJ (see all)

發佈留言