Swift入門-Day8:物件導向

更新於 2024/06/23閱讀時間約 11 分鐘

類別(Class)

在Swift中,類別是一種用來定義屬性和方法的模板,可以創建和管理對象。

建構子(Constructor)

建構子(初始化方法)用來初始化類別的實例。在Swift中,建構子使用init關鍵字。

class Person {
var name: String

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

let person = Person(name: "Alice")
print(person.name) // Alice

公開(Public)

使用public關鍵字可以使屬性和方法在模組外部可見和可訪問。

public class Person {
public var name: String

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

public func greet() {
print("Hello, \\\\(name)!")
}
}

let person = Person(name: "Bob")
person.greet() // Hello, Bob!

私有(Private)

使用private關鍵字可以將屬性和方法限制在類別內部。

class Person {
private var name: String

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

func greet() {
print("Hello, \\\\(name)!")
}
}

let person = Person(name: "Charlie")
// print(person.name) // Error: 'name' is inaccessible due to 'private' protection level
person.greet() // Hello, Charlie!

受保護(Protected)

Swift中沒有受保護(protected)關鍵字,通常使用fileprivateinternal來實現類似功能。

fileprivate:在同一文件內可見。

class Person {
fileprivate var name: String

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

func greet() {
print("Hello, \\\\(name)!")
}
}

let person = Person(name: "David")
person.greet() // Hello, David!

繼承(Inheritance)

繼承允許一個類別繼承另一個類別的屬性和方法。

class Animal {
var name: String

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

func makeSound() {
print("Some generic sound")
}
}

class Dog: Animal {
override func makeSound() {
print("Bark")
}
}

let dog = Dog(name: "Buddy")
dog.makeSound() // Bark

多型(Polymorphism)

多型允許子類別以父類別的型別出現,並在運行時調用適當的子類別方法。

class Animal {
func makeSound() {
print("Some generic sound")
}
}

class Cat: Animal {
override func makeSound() {
print("Meow")
}
}

let animals: [Animal] = [Dog(name: "Buddy"), Cat()]
for animal in animals {
animal.makeSound()
}
// Output:
// Bark
// Meow

封裝(Encapsulation)

封裝是將數據和方法組合在一起,並隱藏內部實現的技術。使用privatefileprivate可以實現封裝。

class Person {
private var name: String

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

func getName() -> String {
return name
}
}

let person = Person(name: "Eve")
print(person.getName()) // Eve

介面(Interface)

Swift使用協議(protocol)來實現介面。協議定義了一組方法和屬性,類別可以遵循這些協議並實現其中的要求。

protocol Greetable {
func greet()
}

class Greeter: Greetable {
func greet() {
print("Hello!")
}
}

let greeter = Greeter()
greeter.greet() // Hello!

抽象類別(Abstract Class)

Swift不支持抽象類別,但可以使用協議和擴展來實現類似功能。

protocol Animal {
var name: String { get set }
func makeSound()
}

class Dog: Animal {
var name: String

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

func makeSound() {
print("Bark")
}
}

let dog = Dog(name: "Buddy")
dog.makeSound() // Bark

靜態類別(Static Class)

Swift不支持靜態類別,但可以使用結構體(struct)和靜態屬性來模擬。

struct Math {
static func square(_ number: Int) -> Int {
return number * number
}
}

print(Math.square(4)) // 16

列舉(Enumerations)

列舉是一種定義相關值組合的型別。

enum Direction {
case north
case south
case east
case west
}

let direction = Direction.north
switch direction {
case .north:
print("Going north")
case .south:
print("Going south")
case .east:
print("Going east")
case .west:
print("Going west")
}
// Going north

委派(Delegates)

委派是一種設計模式,允許類別將某些任務委託給其他類別來完成。

protocol PrinterDelegate {
func printMessage()
}

class Printer {
var delegate: PrinterDelegate?

func print() {
delegate?.printMessage()
}
}

class ConsolePrinter: PrinterDelegate {
func printMessage() {
print("Printing to console")
}
}

let printer = Printer()
let consolePrinter = ConsolePrinter()
printer.delegate = consolePrinter
printer.print() // Printing to console

Lambda 表達式

Swift中的閉包類似於其他語言中的Lambda表達式。

let add = { (a: Int, b: Int) -> Int in
return a + b
}

print(add(2, 3)) // 5

泛型(Generics)

泛型允許你編寫靈活且可重用的代碼。

func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}

var x = 5
var y = 10
swapValues(&x, &y)
print("x: \\\\(x), y: \\\\(y)") // x: 10, y: 5

反射(Reflection)

Swift的反射允許你檢查和修改運行時的類型和對象。

import Foundation

class Person: NSObject {
@objc var name: String
@objc var age: Int

init(name: String, age: Int) {
self.name = name
self.age = age
}
}

let person = Person(name: "Alice", age: 30)
let mirror = Mirror(reflecting: person)

for child in mirror.children {
print("\\\\(child.label!): \\\\(child.value)")
}
// Output:
// name: Alice
// age: 30

這些是Swift中的一些面向對象和高級特性。理解並掌握這些特性將幫助你在Swift編程中編寫更強大和靈活的代碼。

avatar-img
15會員
111內容數
日後將分享關於我的經驗(日常、工作、技術),並期待未來能創造屬於我的宇宙。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Michael楊 的其他內容
此章節旨在解釋Swift語言中函數的基本結構和操作方式,包括函數的聲明、呼叫、參數和返回值。閱讀這個章節可以幫助你理解並掌握如何在Swift編程中有效地使用和管理函數。
本篇介紹了Swift程式語言中的各種流程控制元素,包括條件語句(如if, else if, else),三元運算子,多條件分支判斷的switch語句,以及各種迴圈(如for迴圈,while迴圈,以及repeat-while迴圈)。同時也詳細解釋了如何進行迴圈嵌套,以及如何使用控制迴圈語句。
本章節介紹了程式語言中的各種運算符,包括算數運算子、比較運算子、賦值運算子、位元運算子,以及運算子的優先等級。每種運算子都有對應的範例程式碼和輸出結果,以幫助讀者更好地理解其用法和效果。此外,章節也強調了運算子的優先等級在程式設計中的重要性,並通過範例展示了不同優先等級的運算順序對運算結果的影響。
此章節旨在介紹Swift程式語言中的基本資料型別,包括整數、浮點數、布林型別、字串、字符、選擇型、型別轉換、自訂型別(包括類、結構和枚舉)、元組型別、集合型別、陣列型別和字典型別。每種型別的說明都包含了程式碼範例,以便讀者更好地理解其應用和使用方式。
本章節介紹了如何建立並設置Swift項目以及如何選擇和設置Swift代碼編輯器。這包括在Xcode和命令行中建立Swift項目,選擇Xcode、Visual Studio Code或AppCode作為編輯器,以及如何使用SPM安裝插件。
本章節旨在為讀者提供Swift程式語言的基礎知識,包括其基本語法、註解方法和變數使用方式,並通過具體的程式碼示例來說明這些概念。這將幫助讀者理解Swift的基本結構,並學會如何在Swift中定義變數並使用註解。
此章節旨在解釋Swift語言中函數的基本結構和操作方式,包括函數的聲明、呼叫、參數和返回值。閱讀這個章節可以幫助你理解並掌握如何在Swift編程中有效地使用和管理函數。
本篇介紹了Swift程式語言中的各種流程控制元素,包括條件語句(如if, else if, else),三元運算子,多條件分支判斷的switch語句,以及各種迴圈(如for迴圈,while迴圈,以及repeat-while迴圈)。同時也詳細解釋了如何進行迴圈嵌套,以及如何使用控制迴圈語句。
本章節介紹了程式語言中的各種運算符,包括算數運算子、比較運算子、賦值運算子、位元運算子,以及運算子的優先等級。每種運算子都有對應的範例程式碼和輸出結果,以幫助讀者更好地理解其用法和效果。此外,章節也強調了運算子的優先等級在程式設計中的重要性,並通過範例展示了不同優先等級的運算順序對運算結果的影響。
此章節旨在介紹Swift程式語言中的基本資料型別,包括整數、浮點數、布林型別、字串、字符、選擇型、型別轉換、自訂型別(包括類、結構和枚舉)、元組型別、集合型別、陣列型別和字典型別。每種型別的說明都包含了程式碼範例,以便讀者更好地理解其應用和使用方式。
本章節介紹了如何建立並設置Swift項目以及如何選擇和設置Swift代碼編輯器。這包括在Xcode和命令行中建立Swift項目,選擇Xcode、Visual Studio Code或AppCode作為編輯器,以及如何使用SPM安裝插件。
本章節旨在為讀者提供Swift程式語言的基礎知識,包括其基本語法、註解方法和變數使用方式,並通過具體的程式碼示例來說明這些概念。這將幫助讀者理解Swift的基本結構,並學會如何在Swift中定義變數並使用註解。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
本文介紹瞭如何在SwiftUI中調整元件的對齊方式,包括置中、向左/向右/向上/向下對齊的方法。透過調整HStack、VStack以及frame的maxWidth、maxHeight和alignment屬性,可以達到想要的對齊效果。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
一切從"物件(Object)"開始 1.建立新物件 2.編輯物件內容 3.在物件中新增區塊
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
※ class類別 什麼是class? class是創造consturctor function時的語法糖,本質上與使用function創造物件(object)的行為沒有不同。 class的作用: 用來定義、描述要創造的物件(object)具有那些屬性、行為的一個表達式。就像是「車子的設計圖
※ Object(物件) & Constructor Function(建構式函式) Object(物件)是什麼? 物件是一種「可以將資料、程式碼包含在其中」的資料結構。 Object(物件)的兩種創造方式: 匿名物件:直接使用"{}"。沒有特別的名字,直接從Object中繼承過來的一個物件
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
類別 (class) 是在 ES6 中引入,用來作為建立新物件的模板。它可以將程式碼封裝起來。
Thumbnail
本文讓我們來淺談一下類別是什麼? 若想看詳細一點的python官方教學可點此連結 Python 的類別(Class)是一種面向物件導向程式設計的概念,讓你能夠創建具有屬性和方法的物件。類別是對現實世界中事物的抽象,它包含數據和操作這些數據的方法。它非常的抽象,想像一個類別就像是一個蛋糕模具,
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
本文介紹瞭如何在SwiftUI中調整元件的對齊方式,包括置中、向左/向右/向上/向下對齊的方法。透過調整HStack、VStack以及frame的maxWidth、maxHeight和alignment屬性,可以達到想要的對齊效果。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
一切從"物件(Object)"開始 1.建立新物件 2.編輯物件內容 3.在物件中新增區塊
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
※ class類別 什麼是class? class是創造consturctor function時的語法糖,本質上與使用function創造物件(object)的行為沒有不同。 class的作用: 用來定義、描述要創造的物件(object)具有那些屬性、行為的一個表達式。就像是「車子的設計圖
※ Object(物件) & Constructor Function(建構式函式) Object(物件)是什麼? 物件是一種「可以將資料、程式碼包含在其中」的資料結構。 Object(物件)的兩種創造方式: 匿名物件:直接使用"{}"。沒有特別的名字,直接從Object中繼承過來的一個物件
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
類別 (class) 是在 ES6 中引入,用來作為建立新物件的模板。它可以將程式碼封裝起來。
Thumbnail
本文讓我們來淺談一下類別是什麼? 若想看詳細一點的python官方教學可點此連結 Python 的類別(Class)是一種面向物件導向程式設計的概念,讓你能夠創建具有屬性和方法的物件。類別是對現實世界中事物的抽象,它包含數據和操作這些數據的方法。它非常的抽象,想像一個類別就像是一個蛋糕模具,