设为首页 加入收藏

TOP

Swift----方法 、 下标 、 继承 、 初始化 、 析构方法 、 可选链(二)
2017-10-10 12:17:37 】 浏览:9618
Tags:Swift---- 方法 下标 继承 初始
的准备和初始化任务。本案例分别演示值类型的构造过程和类的构造过程。
144 145 2.2 方案 146 147 类和结构体在实例创建时,必须为所有存储型属性设置合适的初始值,可以在在构造方法中为存储属性赋初始值,也可以在定义属性时为其设置默认值。构造方法以关键字init命名,最简单的形式是一个不带任何参数的实例方法。 148 149 在定义构造方法时也能提供参数,为构造过程中提供所需要的数据。 150 151 如果在定义构造方法时没有提供参数的外部名称,Swift会为每个构造方法的参数自动生成一个跟内部名称相同的外部名。 152 153 Swift为所有属性已提供默认值的且自身没有定义任何构造方法的结构体或基类提供一个默认的构造方法,这个构造方法没有任何参数,并且将简单的创建一个所有属性都设置为默认值的实例。 154 155 构造方法可以通过其他构造方法来完成实例的部分构造过程成为构造委托,它能减少多个构造方法间的代码重复。构造委托的实现在值类型和类类型中有所不同,值类型不支持继承构造委托的过程相对简单。 156 157 由于类可以继承,所以类类型的构造委托需要保证其所有继承的存储型属性在构造时也能正确的初始化。 158 159 2.3 步骤 160 161 实现此案例需要按照如下步骤进行。 162 163 步骤一:存储型属性的初始值 164 165 定义一个用来保存华氏温度的结构体Fahrenheit,拥有一个Double类型的存储属性temperature,通过构造方法给该属性赋初始值,代码如下所示: 166 167 168 struct Fahrenheit { 169 var temperature : Double 170 init(){ 171 temperature = 32.0 172 } 173 } 174 创建一个Fahrenheit实例,构造方法会自动被调用,运行结果如图-2所示: 175 176 177 图-2 178 179 步骤二:带参数的构造方法 180 181 定义一个包含摄氏度的结构体,包含两个不同的构造方法init(fromFahrenheit)和init(fromKelvin),分别通过接受不同的温度值来创建新的实例,代码如下所示: 182 183 184 struct Celsius { 185 vartemperatureInCelsius:Double = 0.0 186 init(fromFahrenheitfahrenheit:Double) { 187 temperatureInCelsius = (fahrenheit - 32.0)/1.8 188 } 189 init (fromKevinkelvin:Double) { 190 temperatureInCelsius = kelvin - 273.15 191 } 192 } 193 创建一个Celsius实例,如果不传参会调用构造方法init(),但是由于没有该方法则会编译报错,运行结果如图-3所示: 194 195 196 图-3 197 198 步骤三:构造方法的内部参数名和外部参数名 199 200 如果在定义构造方法时没有提供参数的外部名称,Swift会为每个构造方法的参数自动生成一个跟内部名称相同的外部名。 201 202 定义一个结构体Color,包含三个Double类型的常量属性red、green、blue,分别表示红绿蓝的颜色数值。 203 204 Color结构体提供一个构造方法,包含三个Double类型的构造参数,代码如下所示: 205 206 207 struct Color { 208 let red, green, blue : Double 209 init(red:Double, green:Double, blue:Double){ 210 self.red = red 211 self.green = green 212 self.blue = blue 213 } 214 } 215 创建一个Color实例时需要通过三种颜色的外部参数名来传值,如果不通过外部参数名字传值是无法调用该构造方法的,运行结果如图-4所示: 216 217 218 图-4 219 220 当然也可以使用下划线来忽略外部参数名,代码如下所示: 221 222 223 struct Color { 224 let red, green, blue : Double 225 init(red:Double, green:Double, blue:Double){ 226 self.red = red 227 self.green = green 228 self.blue = blue 229 } 230 init(_ red:Double, _ green:Double, _ blue:Double){ 231 self.red = red 232 self.green = green 233 self.blue = blue 234 } 235 } 236 在创建Color实例时不通过外部参数名字传值将调用第二个构造方法,运行结果如图-5所示: 237 238 239 图-5 240 241 步骤四:默认构造方法 242 243 Swift为所有属性已提供默认值的且自身没有定义任何构造方法的结构体或基类提供一个默认的构造方法。 244 245 定义一个类ShoppingListItem,封装了购物清单中的相关信息:名字name、数量quantity和购物状态purchased. 246 247 如果不为该类定义任何构造方法,它将自动获得一个可以为所有属性设置默认值的默认构造方法,对于可选类型的属性name将设置为nil,代码如下所示: 248 249 250 classShoppingListItem { 251 varname:String? 252 var quantity = 1 253 var purchased = false 254 } 255 var s = ShoppingListItem() 256 运行结果如图-6所示: 257 258 259 图-6 260 261 如果是结构体,还可以自动获得一个逐一成员构造方法,该方法是用来初始化结构体新实例属性的快捷方法。 262 263 在调用逐一成员构造方法时通过与成员名相同的参数名进行传值来完成成员属性的初始化,代码如下所示: 264 265 266 struct Size { 267 var width = 0.0 268 var height = 0.0 269 } 270 var size = Size(width: 10, height: 20) 271 运行结果如图-7所示: 272 273 274 图-7 275 276 步骤五:值类型的构造委托 277 278 对于值类型而言可以使用self.init在自定义的构造方法中引用其它的属于相同值类型的构造方法,并且只能在构造方法内部调用self.init。 279 280 定义一个结构体Rect用来代表几何矩形,包含一个Point类型的属性origin和一个Size类型的属性size,代码如下所示: 281 282 283 struct Point { 284 var x = 0.0 285 var y = 0.0 286 } 287 struct Size { 288 var width = 0.0 289 var height = 0.0 290 } 291 structRect { 292 var origin = Point() 293 var siz
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇窥探Swift编程之强大的Switch 下一篇CocoaPods的安装和使用那些事(Xc..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目