前端之家收集整理的这篇文章主要介绍了
Swift语言 快速基础入门 (2),
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
(文章出处:http://blog-cn.jiazhewang.com/swift%E8%AF%AD%E8%A8%80-%E5%BF%AB%E9%80%9F%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8-2/)
本文根据《The Swift Programming Language》一书 “A Swift Tour”章节进行了简单地翻译,并加入了一些我个人的实验记录和想法,以求用比较快的速度熟悉 Swift 语言的语法和特性。
本文内容分为两部分,本页是第(2)部分,第一部分请点此浏览:Swift语言 快速基础入门 (1)
对象和类 Objects and Classes
类
使用class关键字来声明一个类,关键字之后跟着的是类名。类的属性声明和常量以及变量的声明方式完全想通,唯一不同的是他们被声明在类的大括号内。同样的,方法和函数的声明也是如此。
|
class
Shape
{
var
numberOfSides
=
0
func
simpleDescription
(
)
->
String
{
return
"A shape with (numberOfSides) sides."
}
}
|
要创建一个类的实例,我们可以在类名后加上括号,比如下面例子中那样。我们可以使用“点语法”(dot Syntax)来直接访问实例的属性和方法。
|
var
shape
=
Shape
(
)
shape
.
numberOfSides
7
shapeDescription
.
simpleDescription
)
|
这个版本的 Shape 方法很不靠谱,因为缺少了一个很重要的东西:一个用来设置初始值的方法。我们通常称之为构造函数(constructor、initializer)。在 Swift 中,我们默认通过类中命名为init的方法来作为这个类的构造函数。
1
2
3
4
5
6
7
8
9
10
@H_
502_224@
11
12
NamedShape
{
var
numberOfSides
: Int
0
name
: String
init
(
name
: String
{
self
.
name
name
}
{
"A shape with (numberOfSides) sides."
}
@H_176_ 301@注意 self是如何被用来区分 name 这个类的 属性和 name 这个参数的。第6行中,后面的name 是 init 这个构造 函数的参数,而这个参数被传给了 self.name 这个类的 属性。
当你创造一个实例的时候,像函数调用参数一样直接给构造器直接传入参数。每一个类的属性都要被赋值,不管是通过直接声明的方式(就像 numberOfsides)还是通过构造函数(就像name)。
如果你还需要在删除对象之前进行一些清理工作,可以使用命名为deinit的类内方法来创建一个析构函数(deinitializer)。
继承——子类和父类
声明子类的方式是在其类名后面写一个冒号,后面跟上父类的名字。由于没有必要继承任何标准的根类,所以我们可以根据实际需要来选择继承或者省略父类。
子类中的方法如果重写了父类的方法,在声明前加关键字override来标明。如果没有标明的话,会被编译器报错。编译器同样会检测标明了重写但是实际根本没有重写的方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class
Square
: NamedShape
{
var
sideLength
: Double
init
(
sideLength
: Double
,
name
: String
)
{
self
sideLength
sideLength
super
name
: name
)
4
}
func
area
->
Double
{
return
sideLength
*
sideLength
}
override
String
{
"A square with sides of length (sideLength)."
}
}
let
test
Square
(
sideLength
:
5.2
Crayon-sy" style="border:0px; font-family:inherit; font-size:inherit!important; font-style:inherit; font-weight:inherit!important; margin:0px; outline:0px; padding:0px; vertical-align:baseline; height:inherit; line-height:inherit!important; color:rgb(51,
name
"my test square"
)
test
)
Getter 和 Setter
对于一些简单的属性,可以设置 getter 和 setter。比如下面例子中的 perimeter。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
class
EquilateralTriangle
: NamedShape
{
sideLength
: Double
0.0
sideLength
: Double
,
{
sideLength
sideLength
super
.
: name
)
3
}
perimeter
{
get
{
3.0
*
sideLength
}
set
{
newValue
/
3.0
}
}
override
{
"An equilateral triagle with sides of length (sideLength)."
}
}
triangle
EquilateralTriangle
(
sideLength
:
3.1
Crayon-sy" style="Box-sizing: border-Box; border: 0px; font-family: inherit; font-size: inherit !important; font-style: inherit; font-weight: inherit !important; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; height: inherit; line-height: inherit !important; color: rgb(51,
name
"a triangle"
)
triangle
perimeter
perimeter
9.9
sideLength
|