对象和类
1、关键字 class
使用class 后跟班的名字来创建一个班级。类中的属性声明与常量或变量声明的写法相同,只不过它在类的上下文中。同样,方法和函数声明的写法也是一样的。
通过在类名后加括号来创建一个类的实例。使用点语法来访问实例的属性和方法。
2、init关键字(初始化器)
可以使用init 创建一个类。即初始化器在创建实例时设置一个类。
!!!请注意:要将 self.name
属性 与初始值设定项的参数区分开来。在创建类的实例时,初始值设定项的参数会像函数调用一样传递。每个属性都需要赋值
- 无论是在其声明中(如同 numberOfSides)还是在初始化程序中(与之一样
name )。
deinit 如果您需要在释放对象之前执行一些清理, 请使用此命令创建一个取消初始化程序。
子类在其类名后面包含它们的超类名称,并用冒号分隔。不要求类为任何标准根类继承,所以您可以根据需要包含或省略超类。
覆盖超类实现的子类上override 的方法被标记为
- 无意中覆盖方法,如果没有override ,则被编译器检测为错误。编译器还检测override 那些实际上并没有覆盖超类中任何方法的方法。
-
class
Square:
NamedShape {
-
var
sideLength:
Double
-
-
init(sideLength:Double,
name:
String) {
-
self.sideLength
=sideLength
-
super.init(name:name)
-
numberOfSides
=
4
-
}
-
-
func
area() ->
Double {
-
return
sideLength *
sideLength
-
}
-
-
override
func
simpleDescription() ->
String {
-
return
"A square with sides of length \(sideLength)."
-
}
-
}
-
let
test =
Square(sideLength:5.2,
name:
"my test square")
-
test.area()
-
test.simpleDescription()
枚举和结构
1、枚举:
使用enum 创建一个枚举。像类和所有其他命名类型一样,枚举可以具有与它们关联的方法。
默认情况下,Swift分配原始值从零开始,每次递增1,但您可以通过显式指定值来更改此行为。在上面的例子中,Ace 明确给出了一个原始值1 ,其余的原始值是按顺序分配的。您也可以使用字符串或浮点数作为枚举的原始类型。使用该rawValue 属性来访问枚举个案的原始值。
使用init?(rawValue:) 初始化程序从原始值创建枚举的实例。它返回匹配原始值的枚举情况或者nil 没有匹配的情况Rank 。
-
if
let
convertedRank =
Rank(rawValue:
3) {
-
let
threeDescription =
convertedRank.simpleDescription()
-
}
枚举的实例值是实际值,而不仅仅是编写其原始值的另一种方式。事实上,在没有有意义的原始价值的情况下,您不必提供一个。
注意hearts 上面引用枚举情况的两种方式:当为hearts 常量赋值时,枚举大小写Suit.hearts 由全名引用,因为该常量没有指定显式类型。在交换机内部,枚举案由缩写形式引用,.hearts 因为self 已知该值是套装。只要该值的类型已知,您就可以使用缩写形式。
如果枚举具有原始值,则这些值将作为声明的一部分来确定,这意味着特定枚举案例的每个实例始终具有相同的原始值。枚举案例的另一种选择是将值与案例相关联
- 这些值在创建实例时确定,并且对于枚举案例的每个实例它们可以不同。您可以将关联的值视为像枚举大小写实例的存储属性一样工作。例如,考虑从服务器请求日出和日落时间的情况。服务器或者以请求的信息作出响应,或者以对出错的描述做出响应。
-
enum
ServerResponse {
-
case
result(String,
String)
-
case
failure(String)
-
}
-
-
let
success =
ServerResponse.result("6:00
am",
"8:09 pm")
-
let
failure =
ServerResponse.failure("Out
of cheese.")
-
-
switch
success {
-
case
let .result(sunrise,
sunset):
-
print("Sunrise
is at \(sunrise)
and sunset is at \(sunset).")
-
case
let .failure(message):
-
print("Failure...
\(message)")
-
}
2、结构:
使用struct 创建的结构。结构支持许多与类相同的行为,包括方法和初始化器。结构和类之间最重要的差异之一就是结构在代码中传递时总是被复制,但类是通过引用传递的。
协议和扩展
1、使用protocol 申报的协议。
-
protocol
ExampleProtocol {
-
var
simpleDescription:
String {
get }
-
mutating
func
adjust()
-
}
2、类,枚举和结构都可以采用协议。
|
请发表评论