Swift4 基础部分: Nested Types(嵌套类型)

本文是学习《The Swift Programming Language》整理的相关随笔,基本的语法不作介绍,主要介绍Swift中的一些特性或者与OC差异点。

系列文章:

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 允许你定义嵌套类型,可以在支持的类型中定义嵌套的枚举、类和结构体。

个人觉得枚举中嵌套类与结构体会让整个逻辑看上去很奇怪,相反结构体,类中嵌套其他类型的数据我觉得是合理的。下面举一个例子:

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);

执行结果:

xz is a 18, profession is engineer(High), address is 
hubei-wuhan zhongshan road.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容