设为首页 加入收藏

TOP

Swift----方法 、 下标 、 继承 、 初始化 、 析构方法 、 可选链(一)
2017-10-10 12:17:37 】 浏览:9600
Tags:Swift---- 方法 下标 继承 初始
 1 1 下标的使用  2 
 3 1.1 问题  4 
 5 下标可以定义在类、结构体和枚举中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法。  6 
 7 本案例定义一个Matrix结构体,用于呈现一个Double类型的二维矩阵,其结构体内部使用一个一维数组保存数据,并且定义一个下标用于判断是否会造成数组越界。  8 
 9 1.2 方案  10 
 11 首先定义一个Matrix结构体,该结构体有一个存储属性grid,是一个Double类型的结构体,用于存储矩阵的数据。  12 
 13 Matrix结构体另有两个整型的常量存储属性rows和columns,分别表示矩阵的行数和列数。通过init初始化方法对属性grid、rows以及columns赋初始值。  14 
 15 然后定义并实现下标运算,将传入的行号row和列号column转换为grid一维数组的下标,获取和设置对应的数据。  16 
 17 最后定义一个方法indexIsValidForRow,用于判断行号和列号是否越界,通过断言进行判断。  18 
 19 1.3 步骤  20 
 21 实现此案例需要按照如下步骤进行。  22 
 23 步骤一:定义Matrix结构体  24 
 25 首先定义一个Matrix结构体,该结构体有一个存储属性grid,是一个Double类型的结构体,用于存储矩阵的数据。  26 
 27 Matrix结构体另有两个整型的常量存储属性rows和columns,分别表示矩阵的行数和列数。通过init初始化方法对属性grid、rows以及columns赋初始值,代码如下所示:  28 
 29  
 30 struct Metrix {  31 //保存数据的一维数组
 32 var grid : [Double]  33 //矩阵的行列
 34 let rows : Int, columns : Int  35 //初始化方法
 36 init(rows:Int, columns:Int){  37 self.rows = rows  38 self.columns = columns  39 grid = [Double](count: rows*columns, repeatedValue: 0.0)  40 }  41 }  42 步骤二:实现下标运算  43 
 44 定义并实现下标运算,Marix的下标运算需要两个整型参数row和column,表示二维矩阵的下标,通过行号 row和列号column转换为grid一维数组的下标,获取和设置对应的数据,代码如下所示:  45 
 46  
 47 struct Metrix {  48 //保存数据的一维数组
 49 var grid : [Double]  50 //矩阵的行列
 51 let rows : Int, columns : Int  52 //初始化方法
 53 init(rows:Int, columns:Int){  54 self.rows = rows  55 self.columns = columns  56 grid = [Double](count: rows*columns, repeatedValue: 0.0)  57 }  58 subscript (row:Int,column:Int)->Double {  59 get {  60 return grid[row * columns + column]  61 }  62 set {  63 grid[row * columns + column] = newValue  64 }  65 }  66 }  67 步骤三:判断下标越界  68 
 69 在结构体中定义一个方法indexIsValidForRow,用于判断行号和列号是否越界,代码如下所示:  70 
 71  
 72 //判断下标越界
 73 funcindexIsValidForRow (row:Int,column:Int)->Bool {  74 let index = row * columns + column  75 return row >= 0 && row <self.rows&& column >= 0 && column <self.columns  76 }  77 在下标运算中通过断言进行判断,代码如下所示:  78 
 79  
 80 subscript (row:Int,column:Int)->Double {  81 get {  82 assert(self.indexIsValidForRow(row, column: column), "下标越界")  83 return grid[row * columns + column]  84 }  85 set {  86 assert(self.indexIsValidForRow(row, column: column), "下标越界")  87 grid[row * columns + column] = newValue  88 }  89 }  90 然后创建一个Marix实例并进行赋值,运行结果如图-1所示:  91 
 92 
 93 图-1
 94 
 95 1.4 完整代码  96 
 97 本案例中,完整代码如下所示:  98 
 99  
100 importUIKit 101 struct Metrix { 102 //保存数据的一维数组
103 var grid : [Double] 104 //矩阵的行列
105 let rows : Int, columns : Int 106 //初始化方法
107 init(rows:Int, columns:Int){ 108 self.rows = rows 109 self.columns = columns 110 grid = [Double](count: rows*columns, repeatedValue: 0.0) 111 } 112 //判断下标越界
113 funcindexIsValidForRow (row:Int,column:Int)->Bool { 114 let index = row * columns + column 115 return row >= 0 && row <self.rows&& column >= 0 && column <self.columns 116 } 117 subscript (row:Int,column:Int)->Double { 118 get { 119 assert(self.indexIsValidForRow(row, column: column), "下标越界") 120 return grid[row * columns + column] 121 } 122 set { 123 assert(self.indexIsValidForRow(row, column: column), "下标越界") 124 grid[row * columns + column] = newValue 125 } 126 } 127 } 128 var m = Metrix(rows: 3, columns: 4) 129 m[0,0] = 100
130 m[0,1] = 200
131 m[0,2] = 300
132 m[0,3] = 400
133 //下标越界 134 //m[0,4] = 500
135 m[1,0] = 600
136 m[1,1] = 700
137 隐藏 138 
139 2 构造过程 140 
141 2.1 问题 142 
143 构造过程是为了使用某个类、结构体或枚举类型的实例而进行的准备过程,这个过程包含了为实例中的每个属性设置初始值和为其执行必要
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇窥探Swift编程之强大的Switch 下一篇CocoaPods的安装和使用那些事(Xc..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目