加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift语言 快速基础入门 (2)

发布时间:2020-12-14 01:44:00 所属栏目:百科 来源:网络整理
导读:(文章出处: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”章节进行了简单地翻译,并加入了一些我个人的实验记录

(文章出处: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关键字来声明一个类,关键字之后跟着的是类名。类的属性声明和常量以及变量的声明方式完全想通,唯一不同的是他们被声明在类的大括号内。同样的,方法和函数的声明也是如此。

要创建一个类的实例,我们可以在类名后加上括号,比如下面例子中那样。我们可以使用“点语法”(dot syntax)来直接访问实例的属性和方法。

这个版本的 Shape 方法很不靠谱,因为缺少了一个很重要的东西:一个用来设置初始值的方法。我们通常称之为构造函数(constructor、initializer)。在 Swift 中,我们默认通过类中命名为init的方法来作为这个类的构造函数。

NamedShape {
var numberOfSides : Int 0
name : String
init ( name : String {
self . name name
}
{
"A shape with (numberOfSides) sides."
}
注意self是如何被用来区分 name 这个类的属性和 name 这个参数的。第6行中,后面的name 是 init 这个构造函数的参数,而这个参数被传给了 self.name 这个类的属性。

当你创造一个实例的时候,像函数调用参数一样直接给构造器直接传入参数。每一个类的属性都要被赋值,不管是通过直接声明的方式(就像 numberOfsides)还是通过构造函数(就像name)。

如果你还需要在删除对象之前进行一些清理工作,可以使用命名为deinit的类内方法来创建一个析构函数(deinitializer)。

继承——子类和父类

声明子类的方式是在其类名后面写一个冒号,后面跟上父类的名字。由于没有必要继承任何标准的根类,所以我们可以根据实际需要来选择继承或者省略父类。

子类中的方法如果重写了父类的方法,在声明前加关键字override来标明。如果没有标明的话,会被编译器报错。编译器同样会检测标明了重写但是实际根本没有重写的方法。

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 name "my test square" )
test )

Getter 和 Setter

对于一些简单的属性,可以设置 getter 和 setter。比如下面例子中的 perimeter。

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 name "a triangle" )
triangle perimeter
perimeter 9.9
sideLength

方法 vs 函数

Swift 中,“类中的方法”和一般“函数”有一个重要的区别,那就是参数名。函数的参数名只在函数内部被使用,但是方法的参数名在调用方法时需要写出来。(但是为了对于很多只有一个参数的方法来说简便一点,第一个参数名默认不需要写出)默认地,调用时的参数名与方法内的参数名一样,但是也可以在方法内自定义第二个参数名,具体看下面的例子。