您的位置:首页 > 移动开发 > Swift

swift2.0 学习笔记six

2016-04-28 11:32 465 查看
//类和结构体

//共同点:1.定义属性用于存储值 2.定义方法用于提供功能

//3.定义构造器用于生成初始化值 4.通过扩展以增加默认实现的功能

//5.实现协议以提供某种标准功能

//类的附加功能有:1.继承允许一个类继承另一个类的特征

//2.类型转换允许在运行时检查和解释一个类实例的类型

//3.允许一个类实例释放任何其所被分配的资源

//4.引用计数允许对一个类的多次引用

struct Dlg{

var width = 0

var height = 0

//var ddd = MyMode()

}

class Mode {

var dlg = Dlg()
//结构体Dlg的实例,

var interlaced =
false

var frameRate = 0.0

var name : String?

}

class ViewController:
UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

//结构体和类都使用构造器语法来生成新的实例。

var myDLG=Dlg()

let myMode=Mode()

//print("width is \(myDLG.ddd.frameRate)") //width is 0.0

print("width is
\(myDLG.width)")//width is 0

print("width is
\(myMode.dlg.width)")//width is 0

//与 Objective-C
语言不同的是,Swift
允许直接设置结构体属性的子属性

myDLG.width = 300

myMode.dlg = myDLG

print("the width is
\(myMode.dlg.width)")//the width is 300

//注意:结构体和枚举是值类型

//!!! 值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝。

myDLG.width=1000

print("the width is
\(myMode.dlg.width)")//the
width is 300(因为是值类型)

//结构体类型的成员逐一构造器(Memberwise Initializers for Structure Types)

//与结构体不同,类实例没有默认的成员逐一构造器。

let ddd=Dlg(width: 20, height: 40)

let ddd2=ddd

//因为 Dlg
是一个结构体,所以ddd2
的值其实是 ddd
的一个拷贝副本,而不是 ddd
本身

//枚举也遵循相同的行为准则:

enum CompassPoint {

case North, South, East, West

}

var currentDirection =
CompassPoint.West

let rememberedDirection = currentDirection

currentDirection = .East

if rememberedDirection
== .West {

print("The remembered direction is still .West")

}

//
输出 "The remembered direction is still .West"

//注意:
类是引用类型

//与值类型不同,引用类型在被赋予到一个变量、常量或者被传递到一个函数时,其值不会被拷贝。因此,引用的是已存在的实例本身而不是其拷贝。

let myClass=Mode()

myClass.name="你好啊"

let myClass2=myClass

print(myClass2.name!)
//你好啊

//恒等运算符
等价于(===)
不等价于(!==)

//运用这两个运算符检测两个常量或者变量是否引用同一个实例:

if myClass === myClass2{

print("两个常量引用同一个实例")

}//两个常量引用同一个实例

//注意 “等价于”(===)和 “等于”(==)的不同

//1.等价于表示两个类型的常量或变量引用同一个类实例

//2.等于表示两个实例的值“相等”或“相同”

//类和结构体的选择

//当符合一条或多条以下条件时,请考虑构建结构体:

//.该数据结构的主要目的是用来封装少量相关简单数据值

//.该数据结构的实例在被赋值或传递时,封装的数据将会被拷贝而不是被引用

//.该数据结构中存储的值类型属性也应该被拷贝,而不是被引用

//字符串(String)、数组(Array)、和字典(Dictionary)类型的赋值与复制行为

//swift 中,许多基本类型,如String Array Dictionary
类型均已结构体的形式实现。这意味着被赋值给新的常量或变量,或被传入函数或方法中时,他们的值会被拷贝

//OC 中 NSString NSArray
和NSDictonary类型均以类的形式实现,而并非结构体。他们在被赋值或者被传入函数或方法时,不会发生值拷贝,而是传递现有实例引用

var aa : Array = ["one" ,
"two" ,"three"]

var bb = aa

bb.append("four")

print(bb)
//["one", "two", "three", "four"]

print(aa)
//["one", "two", "three"]

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: