Swift2.0对象基础知识点有哪些
导读:本文共4458字符,通常情况下阅读需要15分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 类与实例(对象)类“是引用类型”,而非“值类型”使用class关键字定义类class People { var name:String = "" var age = 0} People是类名 {}包含类的主体部分,包括属性和行为 命名规范:类名首字母大写通过类可以创建实例变量或实例常量var p1:People = People()... ...
目录
(为您整理了一些要点),点击可以直达。- (4): var name:String = "&
- (5): var age = 0
- (7): People是类名
- (8): {}包含类的主体部分,包括属性和行为
- (9): 命名规范:类名首字母大写
- (13): People()表示调用了People类的构造器
- (24): 通过类名访问静态存储属性
- (31): var name:String = "&
- (32): lazy var age = 0
- (33): func printAge() {
- (34): print("age is \(ag
- (35): }
- (44): 行为属性必须是变量,不能有初值
- (45): get的语法:
- (46): var 行为属性:类型 {
- (47): get{
- (48): return 符合类型的值
- (49): }
- (50): }
- (51): 可简化为:
- (52): var 行为属性:类型 {
- (53): return 符合类型的值
- (54): }
- (55): set的语法:
- (56): var行为属性:类型 {
- (57): set (newValue) {
- (58): //操作
- (59): }
- (60): }
- (61): 可简化为:
- (62): var 行为属性:类型 {
- (64): }
- (65): 如:
- (67): var mindDesc:String = &qu
- (68): var dream:String = "
- (69): var reality:String = &quo
- (70): var isHappy:Bool {
- (71): get {
- (73): return true
- (74): }
- (75): else {
- (76): return false
- (77): }
- (78): }
- (79): set(newValue) {
- (80): if ( newValue ) {
- (81): mindDesc = "Ha
- (82): }
- (83): else {
- (84): mindDesc = "No
- (85): }
- (86): }
- (87): }
- (88): }
- (90): p1.isHappy = true
- (91): //p1.dream = "中500万&
- (92): //p1.reality = "没中奖&
- (97): }
- (100): 使用class修饰,通过类名访问
- (102): 语法: class var 属性名:类型 { g
- (103): 如:
- (105): class var maxHeight:Float
- (106): return 2.40
- (107): }
- (113): 如:
- (114): class People { var sa
- (115): willSet{
- (116): print("工资调整了!")
- (118): p1.salary = 150
- (119): 属性观察器实现了类似KVO模式的功能
- (125): 如:
- (127): print("salary is \(s)
- (135): 如:
- (137): }
- (138): People.printDesc()
- (141): 在对象方法中,self表示当前实例对象
- (142): 在类方法中,self表示当前类
- (146): 如:
- (147): class People {
- (148): var names:[Int:String] = [
- (150): }
- (152): print(p[007]!)
- (154): 下标方法可以重载,也可以只读,如:
- (155): class People {
- (156): var names:[Int:String] = [
- (158): }
- (160): print(p[001]!)
- (161): print(p[007, "哈喽"
类与实例(对象)
类“是引用类型”,而非“值类型”
使用class关键字定义类
class People {
var name:String = ""
var age = 0
}
People是类名
{}包含类的主体部分,包括属性和行为
命名规范:类名首字母大写
通过类可以创建实例变量或实例常量
var p1:People = People()
let p2 = People()
People()表示调用了People类的构造器
实例对象通过. 运算符 访问属性和行为
属性
可以带默认值,也可以不带默认值(稍后介绍)
可以是变量,也可以是常量,常量必须有默认值
属性的类型也可以是可选类型
属性可以分成两大类:
存储属性:占用存储空间
行为属性:不占用存储空间,访问属性时实际上是调用方法
静态存储属性:
使用static声明,属于整个类型而不是某个实例对象
通过类名访问静态存储属性
惰性存储属性:(存储属性)
这种属性只有到了一段时间后或某个条件出发后才会存在
在此之前,该属性仅仅是占位,无存储空间
惰性属性实现了类似懒加载的功能(当属性的值需要复杂或大量计算时)
关键字:lazy,必须是变量,必须有初值,如:
class People {
var name:String = ""
lazy var age = 0
func printAge() {
print("age is \(age)")
}
}
var p1:People = People()
p1.printAge()
在创建完p1实例后,通过调试器可以查看到age.storage=nil
在调用printAge()方法后,由于访问到了age属性,通过调试器可以看到age.storage=0
惰性属性的初值通常设定为函数的返回值或对象,以实现懒加载的功能
行为属性:
虽是属性但没有实际存储空间,提供取值访问器get和赋值访问器set
行为属性必须是变量,不能有初值
get的语法:
var 行为属性:类型 {
get{
return 符合类型的值
}
}
可简化为:
var 行为属性:类型 {
return 符合类型的值
}
set的语法:
var行为属性:类型 {
set (newValue) {
//操作
}
}
可简化为:
var 行为属性:类型 {
set {//操作}//省略的参数名默认为newValue
}
如:
class People {
var mindDesc:String = ""
var dream:String = ""
var reality:String = ""
var isHappy:Bool {
get {
if (!dream.isEmpty && dream == reality) || mindDesc == "Happy" {
return true
}
else {
return false
}
}
set(newValue) {
if ( newValue ) {
mindDesc = "Happy"
}
else {
mindDesc = "No Happy"
}
}
}
}
var p1 = People()
p1.isHappy = true
//p1.dream = "中500万"
//p1.reality = "没中奖"
print(p1.mindDesc)
print(p1.isHappy)
如果不提供set赋值访问器,则该属性是只读的,如:
var isHappy:Bool {
if (!dream.isEmpty && dream == reality) || mindDesc == "Happy" {
return true
}
else {
return false
}
}
类行为属性:
类行为属性是一种特殊的行为属性,属于整个类型,而不属于某个实例对象
使用class修饰,通过类名访问
也可称作是静态行为属性(static一般用于结构体、枚举,class用于类类型)
语法: class var 属性名:类型 { get/set{} }
如:
class People {
class var maxHeight:Float {
return 2.40
}
}
print(People.maxHeight)
属性的观察器:
用于检测属性变化的周期,分成willSet和didSet两个观察期
语法:willSet(newValue){} didSet(oldValue) //参数都可以省略
如:
class People {
var salary:Int = 200 {
willSet{
print("工资调整了!")
}
didSet{
if salary > oldValue {
print("涨工资了!")
}
else if salary < oldValue {
print("降工资了!")
}
}
}
}
var p1:People = People()
p1.salary = 300
p1.salary = 150
属性观察器实现了类似KVO模式的功能
属性观察器同样适用于全局变量和局部变量,其中全局变量可理解为省略了lazy的惰性行为变量
方法
方法是与类型相关联的函数,是类应具有的行为动作,与C++/Java这些语言不同的是:在结构体和枚举中都可以定义方法
对象方法:
实例方法通过实例对象通过.运算符调用
如:
class People {
var salary:Int = 200
func receiveSalary(date:String)->Int {
print("发 \(date) 工资了!")
return salary
}
}
var p1:People = People()
var s = p1.receiveSalary("2016年2月")
print("salary is \(s)")
在实例方法内部可以直接访问属性,因为属性的作用域是在类的内部
在实例方法内部可以直接调用实例方法,因为实例方法的作用域是在类的内部
注意:方法也是函数,函数的规则都是支持的
类方法:
与类型属性类似,不属于某个实例对象,而是属于整个类,通过类名调用
语法:class func 方法名(参数列表)->返回值 {}
也称“静态方法”(static用于结构体、枚举,class用于类类型)
如:
class People {
class var desc:String {
return "人类"
}
class func printDesc() {
print("我们是\(desc)")
}
}
People.printDesc()
需要注意的是:在类方法内部,只能访问类行为属性、静态属性和类方法
方法中的self关键字:
在对象方法中,self表示当前实例对象
在类方法中,self表示当前类
下标脚本方法:
是Swift提供的一种特殊对象方法,对象通过下标s运算符调用下标方法
语法:subscript(参数列表)->返回值 { get/set访问器 }
如:
class People {
var names:[Int:String] = [:]
subscript(index:Int)->String? {
get {
return names[index]
}
set {
names[index] = newValue
}
}
}
var p:People = People()
p[001] = "张三"
p[007] = "李四"
print(p[001]!)
print(p[007]!)
下标方法的参数可以是多个,甚至是可变的,不能用inout修饰,不能设置默认参数值
下标方法可以重载,也可以只读,如:
class People {
var names:[Int:String] = [:]
subscript(index:Int)->String? {
get {
return names[index]
}
set {
names[index] = newValue
}
}
subscript(index:Int, appendString:String )->String? {
get {
let s:String? = names[index]!+appendString
return s
}
}
}
var p:People = People()
p[001] = "张三"
p[007] = "李四"
print(p[001]!)
print(p[007, "哈喽"]!)
swift的访问权限
三个访问权限修饰符:private internal public
访问权限的控制不是基于类的,而是基于文件的,即修饰标识符在哪些源文件中可以进行访问
可修饰的标识符:类名、结构体名、枚举名、方法名、属性名等
private:只能在当前的源文件中访问
internal:只能在当前源文件所在的模块中访问(默认权限,可以不写)
public:在任意源文件中都可以访问
Swift2.0对象基础知识点有哪些的详细内容,希望对您有所帮助,信息来源于网络。