
- Swift 教程
- Swift - 首頁
- Swift - 概述
- Swift - 環境
- Swift - 基本語法
- Swift - 變數
- Swift - 常量
- Swift - 字面量
- Swift - 註釋
- Swift 運算子
- Swift - 運算子
- Swift - 算術運算子
- Swift - 比較運算子
- Swift - 邏輯運算子
- Swift - 賦值運算子
- Swift - 位運算子
- Swift - 其他運算子
- Swift 高階運算子
- Swift - 運算子過載
- Swift - 算術溢位運算子
- Swift - 恆等運算子
- Swift - 範圍運算子
- Swift 資料型別
- Swift - 資料型別
- Swift - 整數
- Swift - 浮點數
- Swift - Double
- Swift - 布林值
- Swift - 字串
- Swift - 字元
- Swift - 類型別名
- Swift - 可選值
- Swift - 元組
- Swift - 斷言和前提條件
- Swift 控制流
- Swift - 決策
- Swift - if 語句
- Swift - if...else if...else 語句
- Swift - if-else 語句
- Swift - 巢狀 if 語句
- Swift - switch 語句
- Swift - 迴圈
- Swift - for in 迴圈
- Swift - while 迴圈
- Swift - repeat...while 迴圈
- Swift - continue 語句
- Swift - break 語句
- Swift - 穿透語句
- Swift 集合
- Swift - 陣列
- Swift - 集合
- Swift - 字典
- Swift 函式
- Swift - 函式
- Swift - 巢狀函式
- Swift - 函式過載
- Swift - 遞迴
- Swift - 高階函式
- Swift 閉包
- Swift - 閉包
- Swift - 轉義和非轉義閉包
- Swift - 自動閉包
- Swift 面向物件程式設計
- Swift - 列舉
- Swift - 結構體
- Swift - 類
- Swift - 屬性
- Swift - 方法
- Swift - 下標
- Swift - 繼承
- Swift - 重寫
- Swift - 初始化
- Swift - 析構
- Swift 高階特性
- Swift - ARC 概述
- Swift - 可選鏈
- Swift - 錯誤處理
- Swift - 併發
- Swift - 型別轉換
- Swift - 巢狀型別
- Swift - 擴充套件
- Swift - 協議
- Swift - 泛型
- Swift - 訪問控制
- Swift - 函式與方法
- Swift - SwiftyJSON
- Swift - 單例類
- Swift 隨機數
- Swift 不透明型別和裝箱型別
- Swift 有用資源
- Swift - 線上編譯
- Swift - 快速指南
- Swift - 有用資源
- Swift - 討論
Swift - 巢狀型別
巢狀型別是 Swift 程式設計中一個非常強大的工具。使用巢狀型別,我們可以輕鬆地將列舉、類和結構體巢狀到其他列舉、類和結構體中。使用巢狀型別,我們可以將列舉或類巢狀到結構體中,反之亦然。所以我們可以說,使用巢狀型別可以建立複雜的自定義型別。
巢狀型別通常用於建立組織良好且分層結構的程式。它們也用於封裝程式碼,以便我們更容易理解。它們還可以減少名稱空間衝突。
建立巢狀型別
我們可以透過將一個結構體定義到另一個結構體中,或者將一個類定義到另一個類中來建立巢狀型別,就像巢狀函式一樣。我們可以在另一個結構體、類和列舉中建立多個結構體、類和列舉。
語法
以下是巢狀型別的語法:
Struct Name{ Struct name{ // body } }
使用此語法,我們可以巢狀類和列舉。
示例
假設我們正在建立一個汽車的結構體,其中包含多種型別的特性,例如顏色和天窗。因此,使用巢狀型別,我們可以定義每種型別的規格。
struct Car{ struct Color{ var single: String var double: String var customize: String } struct Sunroof{ var half: String var full: String } }
建立巢狀型別的例項
我們可以使用點運算子建立巢狀型別的例項。只需在外部型別的名稱前加上點運算子,然後指定巢狀型別的名稱即可。每個巢狀型別都有其例項。
語法
以下是建立巢狀型別例項的語法:
let name = outerTypeName.nestedTypeName(value: type)
或者:
var name = OuterTypeName(label1:Value, lable2: OuterTypeName.NestedTypeName(label: Value, lable2: Value))
示例
讓我們建立上述巢狀型別的例項:
let instance1 = Car.Color(single: "Yellow", double: "Green Black", customize: "Blue") let instance2 = Car.Sunroof(half: "yes", full: "No")
或者:
var myCar = Car(name:"Breeza", color: Car.Color( single: "Blue", double: "No", customize: "White"), sunroof:Car.Sunroof(half: "Yes", full: "No"))
完整的示例如下:
import Foundation // Outer sturtcure struct Car{ // Nested structure 1 struct Color{ var single: String var double: String var customize: String } // Nested structure 1 struct Sunroof{ var half: String var full: String } // Properties var name: String var color: Color var sunroof:Sunroof } // Creating instance of Car structure var myCar = Car(name:"Breeza", color: Car.Color(single: "Blue", double: "No", customize: "White"), sunroof:Car.Sunroof(half: "Yes", full: "No")) // Displaying Data print("Car name:", myCar.name) print("Car Color:", myCar.color.single) print("Have half Sunroof:", myCar.sunroof.half)
輸出
它將產生以下輸出:
Car name: Breeza Car Color: Blue Have half Sunroof: Yes
結構體內的列舉
使用巢狀型別,您不必只將結構體巢狀到另一個結構體中。我們還可以將列舉巢狀到另一個結構體中,反之亦然。
示例
將列舉巢狀到結構體中的 Swift 程式。
import Foundation // Outer structure struct Tutorialspoint { // Nested enum enum Department { case HR case Development case Designing case ContentWriting } // Properties var name: String var location: String var department: Department init(name: String, location: String, department: Department) { self.name = name self.location = location self.department = department } // Method func employeeDetail() { print("Name: \(name)") print("Location: \(location)") print("Department: \(department)") } } let report = Tutorialspoint(name: "Mona", location: "Hyderabad", department: .Designing) report.employeeDetail()
輸出
它將產生以下輸出:
Name: Mona Location: Hyderabad Department: Designing
類內的結構體
使用巢狀型別,我們可以將結構體巢狀到類中,或者將類巢狀到結構體中,而不會出現任何錯誤。
示例
將結構體巢狀到另一個類中的 Swift 程式。
import Foundation // Outer class class XYZCollege { // Nested structure struct StudentDetail { var name: String var age: Int var subject: String var year: Int } // Properties var department: String var details: [StudentDetail] init(department: String) { self.department = department self.details = [] } // Method 1 func newStudents(student: StudentDetail) { details.append(student) } // Method 2 func studentsData() { print("department name: \(department):") for s in details { print("name: \(s.name), age: \(s.age), subject: \(s.subject), year: \(s.year)") } } } // Creating instances let s = XYZCollege(department: "Science") let stud1Detail = XYZCollege.StudentDetail(name: "Mona", age: 19, subject: "Maths", year: 1) let stud2Detail = XYZCollege.StudentDetail(name: "Pihu", age: 18, subject: "Chemistry", year: 1) let stud3Detail = XYZCollege.StudentDetail(name: "Suman", age: 19, subject: "Maths", year: 1) // Accessing the methods s.newStudents(student: stud1Detail) s.newStudents(student: stud2Detail) s.newStudents(student: stud3Detail) s.studentsData()
輸出
它將產生以下輸出:
department name: Science: name: Mona, age: 19, subject: Maths, year: 1 name: Pihu, age: 18, subject: Chemistry, year: 1 name: Suman, age: 19, subject: Maths, year: 1
廣告