本文是學(xué)習(xí)《The Swift Programming Language》整理的相關(guān)隨筆,基本的語法不作介紹,主要介紹Swift中的一些特性或者與OC差異點(diǎn)。
系列文章:
- Swift4 基礎(chǔ)部分:The Basics
- Swift4 基礎(chǔ)部分:Basic Operators
- Swift4 基礎(chǔ)部分:Strings and Characters
- Swift4 基礎(chǔ)部分:Collection Types
- Swift4 基礎(chǔ)部分:Control Flow
- Swift4 基礎(chǔ)部分:Functions
- Swift4 基礎(chǔ)部分:Closures
- Swift4 基礎(chǔ)部分: Enumerations
- Swift4 基礎(chǔ)部分: Classes and Structures
- Swift4 基礎(chǔ)部分: Properties
- Swift4 基礎(chǔ)部分: Methods
- Swift4 基礎(chǔ)部分: Subscripts
- Swift4 基礎(chǔ)部分: Inheritance
- Swift4 基礎(chǔ)部分: Initialization
- Swift4 基礎(chǔ)部分: Deinitialization
- Swift4 基礎(chǔ)部分: Automatic Reference Counting(自動(dòng)引用計(jì)數(shù))
- Swift4 基礎(chǔ)部分: Optional Chaining(可選鏈)
- Swift4 基礎(chǔ)部分: Error Handling(錯(cuò)誤處理)
- Swift4 基礎(chǔ)部分: Type Casting(類型轉(zhuǎn)換)
Enumerations are often created to support a specific class
or structure’s functionality. Similarly, it can be
convenient to define utility classes and structures purely
for use within the context of a more complex type. To
accomplish this, Swift enables you to define nested types,
whereby you nest supporting enumerations, classes, and
structures within the definition of the type they
support.
- Swift 允許你定義嵌套類型,可以在支持的類型中定義嵌套的枚舉、類和結(jié)構(gòu)體。
個(gè)人覺得枚舉中嵌套類與結(jié)構(gòu)體會(huì)讓整個(gè)邏輯看上去很奇怪,相反結(jié)構(gòu)體,類中嵌套其他類型的數(shù)據(jù)我覺得是合理的。下面舉一個(gè)例子:
class Person {
let name:String;
let age:Int;
let sex:Sex;
let profession:Profession;
let address:Address;
enum Sex {
case male,female
}
init(_ profession:Profession,_ address:Address,_ name:String, _ age:Int, _ sex:Sex) {
self.profession = profession;
self.address = address;
self.name = name;
self.age = age;
self.sex = sex;
}
struct Profession {
let professionName:String;
let level:ProfessionLevel;
enum ProfessionLevel {
case High,Middle,Low
}
init(_ professionName:String,_ level:ProfessionLevel) {
self.professionName = professionName;
self.level = level;
}
}
struct Address {
let city:String;
let street:String;
}
var description: String {
var output = "\(self.name) is a \(self.age),";
output += " profession is \(self.profession.professionName)(\(self.profession.level)),";
output += " address is \(self.address.city) \(self.address.street)";
return output
}
}
var profession:Person.Profession = Person.Profession("engineer",Person.Profession.ProfessionLevel.High);
var address:Person.Address = Person.Address(city:"hubei-wuhan",street:"zhongshan road.");
var person:Person = Person(profession,address,"xz",18,Person.Sex.male);
print(person.description);
執(zhí)行結(jié)果:
xz is a 18, profession is engineer(High), address is
hubei-wuhan zhongshan road.