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

swift学习笔记(4)--结构体和类

2015-10-12 17:38 435 查看
//类和结构体
//相同点
//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)
}

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