Swift的基本使用(4)类和结构体


//结构体和类
//在swift里面,结构体被做了强化,几乎所有的数据类型都是结构体
/**
* 相同:
1.都可以定义属性
2.都可以定义方法
3.都可以定义构造器 init
4.都可以遵守协议
5.延展
*/

/**
* 不同:
1.结构体是值类型,类是引用类型
2.类可以被继承
3.类可以使用类型判断 is
4.类可以使用析构器 deinit
5.一个类可以有多个引用
*/

/*
//结构体
struct Resolution {
//定义属性
var height = 0
var width = 0
}

//结构体自动为我们生成了构造器 init
let resolution1 = Resolution(height: 14, width: 45)
resolution1.width
resolution1.height

//类
class Video {
var resolution = Resolution(height: 10, width: 10)
var frameRate = 0.1
}
//类不会自动生成构造器,需要自己实现
let video = Video()
video.frameRate
video.resolution

//值类型和引用类型的区别
var newResolution = resolution1
newResolution.height = 20
newResolution.height
resolution1.height

var newVideo = video
newVideo.frameRate = 0.5
newVideo.frameRate
video.frameRate

//构造器
struct ResolutionA {
var height = 0
var width = 0
//构造器 系统自动生成self.属性名
init (gao:Int, kuan:Int){
self.height = gao
self.width = kuan

}

}

var resolutionA = ResolutionA(gao: 10, kuan: 10)
resolutionA.height
resolutionA.width

class VideoA {
var resolution = Resolution(height: 10, width: 10)
var frameRate = 0.1

//构造器会自动生成外部参数名,构造器内实现对属性的赋值操作
init(frameRate: Double, resolution:Resolution){
    self.frameRate = frameRate
    self.resolution = resolution
}

}

var videoA = VideoA(frameRate: 0.2, resolution: Resolution(height: 10, width: 10))

//属性分为 : 计算属性和存储属性

/**
* 存储属性: 存储类和结构体里面的常量或变量
计算属性: 不作为存储功能使用,计算属性本身提供 get set 方法间接的计算出属性的值
*/

struct Point {
var x = 0
var y = 0

}

struct Size {
var width = 0
var height = 0
}

struct Rect {
//存储属性
var point = Point(x: 0, y: 0)
var size = Size(width: 100, height: 100)
//计算属性
var center: Point {
get{//计算属性的get方法,用于计算属性的值
let centerX = point.x + size.width / 2
let centerY = point.y + size.height / 2
return Point(x: centerX, y: centerY)
}
//set方法里会自动的生成 newValue(代表外部传入的数)
//如果不实现set方法,只读属性
set{
//实现平移变化,宽高不变
let x = newValue.x - size.width / 2
let y = newValue.y - size.height / 2
point.x = x
point.y = y
}
}
}

var rect = Rect(point: Point(x: 0, y: 0), size: Size(width: 200, height: 200))
rect.center
rect.center = Point(x: 200, y: 200)
rect.center.x
rect.point

*/

//定义方法
struct ResolutionB {
var width = 0
var height = 0

//结构体中方法实现体内部默认不能对结构体属性做更改
//如果有属性更改需求,需要在方法定义前面使用mutating关键字进行修饰,类方法无此限制

mutating func hello(){
    println("你好,大胖子")
    func dasini(){
        println("打死你, 小鹏鹏")
    }
    dasini()
    width = 20
}
//使用static关键字修饰的方法为静态方法,调用时使用结构体本身进行调用
static func helloWord(){
    println("你好,董小鹏!!!")

}

}

var resolutionB = ResolutionB(width: 10, height: 10)
resolutionB.hello()
ResolutionB.helloWord()

class VideoB {
var frameRate = 0.1
func dj(){
println(“打死dj”)
frameRate = 0.2
}
//使用class关键字修饰的方法为类型方法,使用类本身进行调用
func djj(){
println(“打扁强哥”)
}

//类型属性 只能是计算属性
var name: String{
    get{
        return "毛毛"
    }
}

}
var videoB = VideoB()
videoB.dj()
videoB.djj()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值