【swift】15-0610 下标 继承和扩展 初始化和反初始化

来源:互联网 发布:育知同创教育位置 编辑:程序博客网 时间:2024/06/11 13:28

import Foundation //API,为了调用数学函数
//下标方法
var 数组1 = [1, 2, 3, 4, 5, 6, 7]
数组1[1] = 3
数组1
//数组是一个结构体,中括号是一个方法,叫下标方法。
//求指定半径的圆的面积 S = πr²
struct Square {
subscript(radius: Double) -> Double {
//M_PI 圆周率
//pow函数:2个参数a和b,求a的b次方
return M_PI * pow(radius, 2)
}
}
let s1 = Square()
s1[3]

struct Matrix{
var rows, columns: Int
var grid: [Int]
init(rows: Int, columns: Int){
self.rows = rows
self.columns = columns
grid = Array(count: rows * columns, repeatedValue: 0)
}
//检查索引是否超越数组大小
func indexIsValid(row: Int, columns: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
//用下标方法 来存取矩阵对应的数组
subscript(row: Int, column: Int) -> {
//取回矩阵对应的数组中的值
get{
assert(indexIsValid(row, column: column), “数组索引越界!”
return grid[(row * columns) + column]
}
//根据索引设置矩阵值到数组中
set{
assert(indexIsValid(row, column: column), “数组索引越界!”)
grid[(row * columns) + column] = newValue
}
}
}
var aMatrix = Matrix(rows: 3, columns: 3)
aMatrix[0,0] = 1
aMatrix[0,1] = 2
aMatrix[0,2] = 3
aMatrix[1,0] = 4
aMatrix[1,1] = 5
aMatrix[1,2] = 6
aMatrix[2,0] = 7
aMatrix[2,1] = 8
aMatrix[2,2] = 9
for i in aMatrix.grid {
println(i)
}

//inherit & extension 继承和扩展
//父类
class 车 {
var 速度 = 0
var 描述 : String {
return “时速(速度)公里每小时”
}
func 声响() {
}
}
let 一辆车 = 车()
一辆车.描述
//子类继承父类
class 自行车: 车 {
var 有篮子 = false
}
let 一辆自行车 = 自行车()
一辆自行车.速度 = 25
一辆自行车.描述
//子类的子类
class 情侣自行车: 自行车 {
var 当前乘客数 = 0
}
一辆情侣自行车.当前乘客数 = 2
一辆情侣自行车.速度 = 20
一辆情侣自行车.描述
//子类重载父类的方法
class 动车: 车 {
override func 声响() {
println(“嘟—嘟—嘟”)
}
}
let 一辆动车 = 动车()
一辆动车.声响()
//子类重载父类的计算属性
class 汽车: 车 {
//override var 速度 = 8 这里这么写会报错,不能重载单个属性,只能重载计算属性。
var 轮子数 = 0
override var 描述: String {
return super.描述 + “,有(轮子数)个轮子”
}
override var 速度: Int {
didSet { //一个属性监视器,速度变化后,对其进行了一个判断。
if 速度 > 120 {
println(“警告:您的速度已经超过120公里每小时了,为了您的安全,进入自动驾驶状态。”)
}
}
}
}
let 一辆汽车 = 汽车()
一辆汽车.速度 = 121
一辆汽车.轮子数 = 4
一辆汽车.描述
//扩展
//用于 已存在的类/结构体/枚举类型
//一般用于下面两种情况:
//1.源代码不可知的情况
//2.把复杂的类分解,提高可维护性
extension Double { //对系统的Double类型就行扩展。
var rmb: Double {
return self * 0.0597
}
}
//日本人均月薪31万4150日元
31_4150.rmb // 这里是18754.755
//整数自平方
extension Int {
mutating func 平方() {
self *= self
}
}
var 一个整数 = 1024
一个整数.平方()
一个整数

//诞生和消亡 - 初始化和反初始化
//初始化 - 默认构造器
struct 武器 {
var 持久 = 10
var 攻击力 = 0
var 主人: String?
init() { //默认构造器,把结构体的属性变为初始值。
}
}
var 一把武器 = 武器()
//没有默认构造器那么使用结构体的时候要手动给每个属性赋初始值。
struct 武器 {
var 持久 = 10
var 攻击力 = 0
var 主人: String?
}
var 一把武器 = 武器(持久: 10, 攻击力: 10, 主人: nil)
//如果结构体默认属性没有值,那么构造器方法就必须给属性赋值。
struct 武器 {
var 持久 = Int
var 攻击力 = Int
var 主人: String
init(持久: Int, 攻击力: Int, 主人: String){ //一般参数是跟属性相同
self.持久 = 持久
self.攻击力 = 攻击力
self.主人 = 主人
}
}
var 一把武器 = 武器(持久: 8, 攻击力: 3, 主人: “大法师”)

//多初始化
class 战士 {
var 武器攻击力: Int
var 头盔攻击力: Int
var 戒指攻击力: Int
var 战衣攻击力: Int
var 经验倍数 = 1
var 服务器名: String?
//指定构造器,倾向唯一性,一般一个类里面只有一个指定构造器。
init (武器攻击力: Int, 头盔攻击力: Int, 戒指攻击力: Int, 战衣攻击力: Int) {
self.武器攻击力 = 武器攻击力
self.头盔攻击力 = 头盔攻击力
self.戒指攻击力 = 戒指攻击力
self.战衣攻击力 = 战衣攻击力
}
//便利构造器,可以多个
convenience init (武器攻击力: Int, 头盔攻击力: Int, 戒指攻击力: Int, 战衣攻击力: Int, 经验倍数: Int) { //相当于做主构造器的代理,可以调用主构造器中的方法,再加上便利构造器的特色参数(经验倍数: Int)。
self.init(武器攻击力: 武器攻击力, 头盔攻击力: 头盔攻击力, 戒指攻击力: 戒指攻击力, 战衣攻击力: 战衣攻击力)
self.经验倍数 = 经验倍数
}
convenience init (服务器名: String, 武器攻击力: Int, 头盔攻击力: Int, 戒指攻击力: Int, 战衣攻击力: Int, 经验倍数: Int) {
self.init(武器攻击力: 武器攻击力, 头盔攻击力: 头盔攻击力, 戒指攻击力: 戒指攻击力, 战衣攻击力: 战衣攻击力, 经验倍数: 经验倍数)
self.服务器名 = 服务器名
}
var 总攻击力: Int {
return 经验倍数 * (武器攻击力 + 头盔攻击力 + 戒指攻击力 + 战衣攻击力)
}
}

var 战神 = 战士(服务器名: “一区”, 武器攻击力: 3, 头盔攻击力: 20, 戒指攻击力: 10, 战衣攻击力: 50, 经验倍数: 5)
let 未付费的菜鸟 = 战士(武器攻击力: 3, 头盔攻击力: 2, 戒指攻击力: 1, 战衣攻击力: 5)
未付费菜鸟.总攻击力
战神.总攻击力

//反初始化
//deinit {
//}
class 战士 {
var 武器攻击力: Int
var 头盔攻击力: Int
var 戒指攻击力: Int
var 战衣攻击力: Int
var 经验倍数 = 1
var 服务器名: String?
//指定构造器,倾向唯一性,一般一个类里面只有一个指定构造器。
init (武器攻击力: Int, 头盔攻击力: Int, 戒指攻击力: Int, 战衣攻击力: Int) {
self.武器攻击力 = 武器攻击力
self.头盔攻击力 = 头盔攻击力
self.戒指攻击力 = 戒指攻击力
self.战衣攻击力 = 战衣攻击力
}
//便利构造器,可以多个
convenience init (武器攻击力: Int, 头盔攻击力: Int, 戒指攻击力: Int, 战衣攻击力: Int, 经验倍数: Int) { //相当于做主构造器的代理,可以调用主构造器中的方法,再加上便利构造器的特色参数(经验倍数: Int)。
self.init(武器攻击力: 武器攻击力, 头盔攻击力: 头盔攻击力, 戒指攻击力: 戒指攻击力, 战衣攻击力: 战衣攻击力)
self.经验倍数 = 经验倍数
}
convenience init (服务器名: String, 武器攻击力: Int, 头盔攻击力: Int, 戒指攻击力: Int, 战衣攻击力: Int, 经验倍数: Int) {
self.init(武器攻击力: 武器攻击力, 头盔攻击力: 头盔攻击力, 戒指攻击力: 戒指攻击力, 战衣攻击力: 战衣攻击力, 经验倍数: 经验倍数)
self.服务器名 = 服务器名
}
deinit { //把实例中所有的属性、方法等所占的内存、引用全部给释放,一般情况下swift会帮我们自动处理,所以一般不用这个方法。
}
var 总攻击力: Int {
return 经验倍数 * (武器攻击力 + 头盔攻击力 + 戒指攻击力 + 战衣攻击力)
}
}

0 0
原创粉丝点击