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"]
}
}
//共同点: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"]
}
}
相关文章推荐
- iOS swift 使用基本语法
- Swift - Struct 与Class 的差异性
- Swift快速入门之协议与扩展
- 对照Java学习Swift--类和结构体(Classes and Structures)
- swift的基本语法
- swift入门学习
- Swift中的通知
- iOS学习笔记45-Swift(五)协议
- iOS学习笔记45-Swift(五)协议
- Swift之逻辑分支&循环的介绍
- iOS Swift&OC 模仿主流App 实现滑动视图隐藏导航栏
- Swift/OC 为View或ImageView设置聊天气泡的小三角
- swift 中运算符空格规则,as? 操作符
- swift2.0 学习笔记five
- Swift数据类型之整型和浮点型-备
- swift - 类型方法(即静态变量)
- Swift UITableViewCell中的按钮点击事件
- swift - mutating(杖举或结构体,通过方法来改变自身的值)
- swift - 类型中的self
- swift 中的“..<”,“ ...“以及“_”