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)

發佈留言