//类和结构体
//相同点
//1.类和结构体都可以定义属性和方法(这是和c oc中的结构体的最大区别)
//2.类和结构体中都能定义构造器方法
//不同点
//1.类可以在析构体deinit中释放资源,结构体不可以
//2.类可以继承.结构体是不能被继承
//3.类是一个引用类型,一个实例可以有多个引用,操作的是实例的本身;结构体是值类型,将内容拷贝到新的内存中,操作的是一块新的内存
1.结构体
//结构体
struct length{
var stat = 0.0
var end = 0.0
init(stat : Double , end : Double)
{
self.stat = stat
self.end = end
}
func calculateLength() -> Double
{
return self.end - self.stat
}
}
var len = length(stat: 30, end: 100)
len.calculateLength()
2.类
//类
class Car{
var carName = String?()
var len : length!
init(name : String){
self.carName = name
}
//析构器 , 当类的实例释放的时候可以释放资源
deinit
{
}
}
3.值类型(结构体)与引用类型(类)
var car = Car(name:"BYD")
car.len = length(stat:20 , end:700)
car.len.stat
//值类型,操作的是拷贝的内容
var leng = car.len
leng.stat = 100
car.len.stat
car.carName
//引用类型,操作的实例本身
var car1 = car
car1.carName = "aoTuo"
car.carName
4.属性
(1).存储属性,将常量或者变量作为实例的一部分使用
struct Point{
var x = 0.0
var y = 0.0
}
struct Size{
var width = 0.0
var height = 0.0
}
(2).计算属性,提供一个get方法来获取值,也可以提供一个可选的set方法来设置值
struct Rect {
var oraigon = Point()
var size = Size()
var center : Point{
get{
let centerX = size.width/2 + oraigon.x
let centerY = size.height/2 + oraigon.y
return Point(x: centerX, y: centerY)
}
set(newCenter){
oraigon.x = newCenter.x - size.width/2
oraigon.y = newCenter.y - size.height/2
}
}
}
var rect = Rect()
rect.oraigon.x = 10
rect.oraigon.y = 10
rect.size.width = 100
rect.size.height = 100
rect.center.x
rect.center.y
rect.center = Point(x: 100, y: 100)
rect.oraigon.x
(3).类型属性
class Stu{
class var age : Int{
return 29
}
var name : String!
var type : String!
init(name : String , type : String){
self.name = name
self.type = type
}
func printName() -> String{
return self.name
}
//类的类型和方法,用class关键字声明
class func printAge() -> Int{
return self.age
}
}
Stu.printAge()
var stu = Stu(name: "hanlei", type: "213")
stu.printName()
Stu.age
5.类的继承
class St : Stu{
//重写父类方法,方法前加override关键字
override func printName() -> String{
return self.name
}
override init(name: String, type: String) {
super.init(name: name, type: type)
}
}