Object-C--->Swift之(八)类和结构体
2016-01-28 20:19
417 查看
在Swift中类和结构体有高度的相似性。二者主要区别是:
1. 结构体不支持继承
2. 结构体不支持定义析构器
3. 结构体是值类型,而类是引用类型
对一个类定义而言,包括3种最常见的成员:构造器、属性、方法,如果程序员没有为一个类提供构造器,则系统会为该类提供一个默认、无参数的构造器。一旦程序员为该类提供了构造器,则系统不会再为该类提供默认的构造器。
结构体不能定义final,因为结构体不支持继承。如果程序员没有为结构体提供构造器,系统则会为该结构体提供两个构造器:一个无参数的构造器,一个初始化所有存储属性的构造器。
如果想定义类方法可以用class修饰符
上面代码中并没有定义构造器,系统将为它提供一个默认的、无参数构造器,但这个默认的构造器不会为存储属性分配初始值,因此必须有程序为这些存储属性指定初始值。
注意:类是引用类型
上面代码调用了Monkey带的两个参数的构造器中的一个创建实例,结构体默认会创建两个构造器:一个无参的构造器和一个初始化所有存储属性的构造器。
当调用无参构造器时
1. 结构体不支持继承
2. 结构体不支持定义析构器
3. 结构体是值类型,而类是引用类型
定义类语法格式:
[code][修饰符]class 类名 { 零个到多个构造器 零个到多个属性 零个到多个方法 零个到多个下标 }
对一个类定义而言,包括3种最常见的成员:构造器、属性、方法,如果程序员没有为一个类提供构造器,则系统会为该类提供一个默认、无参数的构造器。一旦程序员为该类提供了构造器,则系统不会再为该类提供默认的构造器。
#定义结构体语法格式:
[code][修饰符]struct 结构体名 { 零个到多个构造器 零个到多个属性 零个到多个方法 零个到多个下标 }
结构体不能定义final,因为结构体不支持继承。如果程序员没有为结构体提供构造器,系统则会为该结构体提供两个构造器:一个无参数的构造器,一个初始化所有存储属性的构造器。
定义方法的语法如下:
[code][修饰符]func 方法名(形参列表)-[->返回值类型] { //具体功能代码 }
如果想定义类方法可以用class修饰符
[code]class Person { var name:String="" var age:Int=0 func say(content:String) { print(content) } }
上面代码中并没有定义构造器,系统将为它提供一个默认的、无参数构造器,但这个默认的构造器不会为存储属性分配初始值,因此必须有程序为这些存储属性指定初始值。
注意:类是引用类型
[code] var p:Person p=Person() p.name="六小龄童" var p1=p p1.name="孙悟空" print(p.name)//输出孙悟空
引用类型比较
引用类型有两个运算符==和!==,这两个运算符只能用于引用类型量的比较,当两个引用类型的变量是否指向同一个实例,当两个引用变量指向同一个实例时,==比较得到true,当两个引用变量不指向同一个实例时,!==比较得到true[code]class Person { var name:String="" var age:Int=0 init(name:String,age:Int) { self.name=name self.age=age } func say(content:String) { print(content) } } var p1=Person(name:"孙悟空",age:2100) var p2=Person(name:"六小龄童",age:48) print(p1==p2)//输出false print(p1 !== p2)输出true var p3=p1 print(p1 == p3)//输出true
接着谈谈结构体吧
[code]struct Monkey { var name:String var age:Int func say() { print("\(name)的年龄为\(age)") } } var monkey=Monkey(name:"孙悟空",age:1500) print(monkey.name)
上面代码调用了Monkey带的两个参数的构造器中的一个创建实例,结构体默认会创建两个构造器:一个无参的构造器和一个初始化所有存储属性的构造器。
当调用无参构造器时
[code]var monkey=Monkey() print(monkey.age)//输出0
相关文章推荐
- 浅析Objective-C的copy
- Objective-C Runtime学习笔记
- Objective-C 协议最基本解释
- Objective-C与JavaScript交互的那些事
- Objective-C Runtime 运行时之六:拾遗(转载)
- Objective-C Runtime 运行时之五:协议与分类(转载)
- The Browser Object Model
- Objective-C Runtime 运行时之四:Method Swizzling(转载)
- Objective-C Runtime 运行时之三:方法与消息(转载)
- SQL Server中的sysobjects
- Object.observe() 观察对象
- id类型和NSObject的区别
- Object-C--->Swift之(八)枚举
- Objective-C Runtime 运行时之二:成员变量与属性(转载)
- 【转】Objective-C消息机制的原理
- object-c 混编 调用C,C++接口
- Objective-C和C++混编的要点
- 详解iPhone开发之Objective-C和 C 混编
- Xcode中C、C++、Object-C3种语言的混编
- 混合使用Objective-C,C++和Objective-C++