From ff932d41e1a78ce986f9aebd8dc8c34e6d02e724 Mon Sep 17 00:00:00 2001 From: JaySurplus Date: Mon, 9 Jun 2014 16:58:45 -0500 Subject: [PATCH] Starting Dot Syntax --- source/chapter2/09_Classes_and_Structures.md | 37 ++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/source/chapter2/09_Classes_and_Structures.md b/source/chapter2/09_Classes_and_Structures.md index 3a6c391b..e311ff2c 100644 --- a/source/chapter2/09_Classes_and_Structures.md +++ b/source/chapter2/09_Classes_and_Structures.md @@ -5,7 +5,7 @@ > 通常一个`类`的实例被称为`对象`。然而在Swift 中,类和结构体的关系要比在其他语言中更加的密切,本章中所讨论的大部分功能都可以用在类和结构体上。因此,我们会主要使用`实例`而不是`对象`。 -### 类和结构体之比较 +### 类和结构体对比 Swift 中类和结构体有很多共同点。共同处在于: * 定义属性用于储存值 @@ -30,7 +30,7 @@ Swift 中类和结构体有很多共同点。共同处在于: >结构体总是通过被复制的方式在代码中传递,因此请不要使用引用计数。 ### 定义 -类和结构体有着类似的定义方式。我们通过关键字`class`和`struct`来分别表示类和结构体,并在一对大括号定义它们的具体内容: +类和结构体有着类似的定义方式。我们通过关键字`class`和`struct`来分别表示类和结构体,并在一对大括号中定义它们的具体内容: class SomeClass { // class definition goes here @@ -39,4 +39,35 @@ Swift 中类和结构体有很多共同点。共同处在于: // structure definition goes here } -> \ No newline at end of file +> 在你每次定义一个新类或者结构体的时候,实际上你是有效地定义了一个新的Swift 类型。因此请使用 `UpperCamelCase` 这种方式来命名(如 `SomeClass` 和`SomeStructure`等),以便符合标准Swift 类型的大写命名风格(如`String`,`Int`和`Bool`)。相反的,请使用`lowerCamelCase`这种方式为属性和方法命名(如`framerate`和`incrementCount`),以便和类区分。 + +以下是定义结构体和定义类的示例: + + struct Resolution { + var width = 0 + var heigth = 0 + } + class VideoMode { + var resolution = Resolution() + var interlaced = false + var frameRate = 0.0 + var name: String? + } + +在上面的示例中我们定义了一个名为`Resolution`的结构体,用来描述一个显示器的像素分辨率。这个结构体包含了两个名为`width`和`height`的储存属性。储存属性是捆绑和储存在类或结构体中的常量或变量。当这两个属性被初始化为整数`0`的时候,它们会被推断为`Int`类型。 + +在上面的示例中我们还定义了一个名为`VideoMode`的类,用来描述一个视频显示器的特定模式。这个类包含了四个储存属性变量。第一个是`分辨率`,它被初始化为一个新的`Resolution`结构体的实例,具有`Resolution`的属性类型。新`VideoMode`实例同时还会初始化其它三个属性,它们分别是,初始值为`false`(意为“non-interlaced video”)的`inteflaced`,回放帧率初始值为`0.0`的`frameRate`和值为可选`String`的`name`。`name`属性会被自动赋予一个默认值`nil`,意为“没有`name`值”,因它是一个可选类型。 + +### 类和结构体实例 +`Resolution`结构体和`VideoMode`类的定义仅描述了什么是`Resolution`和`VideoMode`。它们并没有描述一个特定的分辨率(resolution)或者视频模式(video mode)。为了描述一个特定的分辨率或者视频模式,我们需要生成一个它们的实例。 + +生成结构体和类实例的语法非常相似: + + let someResolution = Resolution() + let someVideoMode = VideoMode() + +结构体和类都使用初始化器语法来生成新的实例。初始化器语法的最简单形式是在结构体或者类的类型名称后跟随一个空括弧,如`Resolution()`或`VideoMode()`。通过这种方式所创建的类或者结构体实例,其属均会被初始化为默认值。类和结构体的初始化在[Initialization](http://)章节会进行更详细的讨论。 + + +### 属性访问 +通过使用*点语法*(*dot syntax*),你可以访问实例中所含有的属性。 \ No newline at end of file