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)

发布留言