swift初始化

class INIT: NSObject {

    // 一个结构体的初始化
// 1、存储属性的初始化
struct Fahrenheit {
var temperature :Double
init(){
temperature = 32.0
} } func createTemperature(){
var myTemperature = Fahrenheit()
println("The default temperature is \(myTemperature.temperature)° Fahrenheit")
} // 2、自己定义初始化(Customizing Initialization)
struct Celeius {
var temperatureInCelsius: Double = 0.0
init(fromFahrenheit fahrenheit: Double){
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
} init(fromKevi keviValue: Double){
temperatureInCelsius = keviValue - 273.15
}
} func createCeleius(){
var celeius = Celeius(fromFahrenheit: 25.0)
println("The tempeture is \(celeius.temperatureInCelsius)")
} // 3. 定义一个RGB结构体
struct Color {
var red = 0.0, green = 0.0, blue = 0.0
init(red: Double, green: Double, blue: Double){
self.red = red
self.green = green
self.blue = blue
}
} func createColor(){
var myColor = Color(red: 0.4, green: 0.6, blue: 0.8)
} } class NetWorkManager: NSObject {
// 4.可选类型初始化,,可选型不须要初始化,反之必须初始化
let name: String
var response: String? init(name: String){
self.name = name
} func ask(){
println("== \(self.name)")
}
} // 5、默认构造器
class ShoppingListItem{
var name: String? var price: Float = 5.4
var isPurse = false // 默认生成的初始化方法
let pictureSize = MySize(width: 5.0, height: 6.0)
} struct MySize {
var width: Double = 0.0
var height: Double = 0.0
} /**
* 6. 数值类型的构造器代理
在实例的初始化过程中,构造器能够调用其它的构造器来完毕初始化。这个过程叫构造器代理。
能够避免多个构造器的反复代码。
*/
struct MyPoint {
var pointX: Double = 0.0 ,ponintY :Double = 0.0
} struct MyStruct {
var origin = MyPoint()
var size = MySize()
init(){} init(origin: MyPoint, size: MySize){
self.origin = origin
self.size = size
} init(center: MyPoint, size: MySize){
let centerX = center.pointX - size.width/2
let centerY = center.ponintY - size.height/2
// 这里使用了还有一个构造器
self.init(origin:MyPoint(pointX: centerX, ponintY: centerY),size:size)
}
} /**
* 5、类的继承和初始化
1、自己定义初始化方法要先调用自己类默认初始化方法。自己重写默认初始化方法要先调用父类默认初始化方法 2、应该要先调用父类的构造器或者自身的默认构造器。以防止先给属性赋值了然后才调用父类或者自身的默认构造器把曾经的赋值覆盖了
指定构造器和便捷构造器 指定构造器是一个类最基本的构造器。 指定构造器通过设置全部属性的初值而且调用全部的父类构造器来依据构造链一次初始化全部的属性。 类所拥有的指定构造器非常少,一般仅仅有一个,而且是连接这父类的构造链依次完毕构造的。 每一个类至少有一个指定构造器,在有些情况下,须要使用继承来从父类中得到该指定构造器,很多其它内容能够查看后面的Automatic Initializer Inheritance章节。 便捷构造器是类的另外一种经常使用构造器。 你能够调用同一个类中的指定构造器来定义一个便捷构造器,使用指定构造器来设置相关的參数默认值。你还能够定义一个便捷构造器来创建这个类的实例或者是别的特殊用途。 假设你的类不须要它们,也能够不定义便捷构造器。 只是对于常见初始化模型须要快捷方式的时候创建一个便捷构造器能够让你的初始化过程变成十分简单便捷。 为了简化指定构造器和便捷构造器的关系。Swift为两种构造器的代理调用设置了三个规则: 规则1:指定构造器必须调用它直接父类的指定构造器 规则2:便捷构造器仅仅能调用同一个类中的其它构造器 规则3:便捷构造器必须以调用一个指定构造器结束 指定构造器必须向上代理 便捷构造器必须横向代理 Unlike methods, properties, and subscripts, you do not need to write the override keyword when overriding an initializer.
*/ class Food{
/**
指定构造器
init(params) { }
便捷构造器
convenience init(params) { }
*/ // 指定构造器。由于它保证了每一个Food实例的属性都被初始化了。由于它没有父类,所以不须要调用super.init()构造器。 var name: String
init(foodName: String ) {
self.name = foodName
} // 便捷构造器init(),这个构造器没有參数。仅仅仅仅是将name设置为了[Unnamed]
convenience init() {
self.init(foodName: "[Unnamed]")
}
} class RecipeIngredient: Food {
var quantity: Int // 定构造器init(name: String, quantity:Int)。用来创建一个新的RecipeIngredient实例。在这个指定构造器中它调用了父类的指定构造器init(name:String)。
init(name:String, quantity: Int){
self.quantity = quantity
super.init(foodName: name)
} // 咋么会须要 override?
// 便捷构造器,init(foodName)。它使用了同一个类中的指定构造器。当然它还包含一个继承来的默认构造器init(),这个构造器将使用RecipeIngredient中的init(name: String)构造器。
convenience override init(foodName: String) {
self.init(name: foodName, quantity: 1)
}
} // hoppingListItem未定义构造器来初始化purchased的值,由于每一个商品在买之前purchased都是默认被设置为没有被购买的。
// 由于ShoppingListItem没有提供其它构造器。那么它就全然继承了父类的构造器
class ShoppingList: RecipeIngredient {
var purchased = false
// 闭包
var description: String {
var output = "\(quantity) x \(name.lowercaseString)"
output += purchased ? " yes" : " no"
return output
}
}

swift初始化的更多相关文章

  1. Swift - 初始化Initialization

    Ps:苹果官方文档-Initialization 自定义控件初始化中常见的几种错误(指定构造器和便利构造器)截图:   意思是:1.没有添加重写符override(重写父类方法)2.没有重写initW ...

  2. swift 初始化

    知识点总结: 1.结构体 1.1.默认初始化方法:1.空初始化方法:2.成员初始化方法 struct Person{ var name = "tom" var age = } le ...

  3. [swift]初始化方法自己主动继承

    子类默认不会继承父类的初始化方法,然而,假设某种条件满足的话.父类的初始化方法还是能够继承给子类.在通常情况下,这意味着你不必复写父类的初始化方法.在安全的前提下能够以最低的代价继承父类的初始化方法. ...

  4. Swift - 初始化方法返回nil表示初始化失败

    自Swift1.1开始,初始化init方法便有返回nil的能力.我们可以在init声明的时候在其后面加上一个 ? 或者 ! 来表示初始化失败时可能返回nil. 比如,给Int类添加一个将字符串初始化成 ...

  5. Swift初始化空字符串

    为了构造一个很长的字符串,可以创建一个空字符串作为初始值.可以将空的字符串字面量赋值给变量,也可以初始化一个新的String 实例: var emptyString = "" // ...

  6. Swift的初始化方法

    我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的. 其实就是安全.在Objective-C中,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证 ...

  7. Swift从入门到精通第十一篇 - 初始化 初识

    初始化(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 初始化 初始化是类.结构体.枚举生成实例的过程,为该类的每个存储属性设置初始值,有些在实例使用前的设置或初始化也可在此实现 ...

  8. Swift语法总结补充(一)

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1. 可选类型是一种类型,String?就是Optional<String>,所以函数参数也可以声明为它2 ...

  9. Swift互用性: 使用Objective-C特性编写Swift类(Swift 2.0版)-b

    本节包括内容: 继承Objective-C的类(Inheriting from Objective-C Classes) 采用协议(Adopting Protocols) 编写构造器和析构器(Writ ...

随机推荐

  1. Python 35 线程(2)线程特性、守护线程、线程互斥锁

    一:线程特性介绍 from threading import Thread import time n=100 def task(): global n n=0 if __name__ == '__m ...

  2. Elasticsearch 7.1.1 集群 + 配置身份验证

    一.安装Elasticsearch 1.1 环境说明 Centos7.6 Elasticsearch7.1.1 #挂载数据盘 fdisk /dev/vdb n,p,,回车,回车,wq fdisk -l ...

  3. SpringMVC参数绑定(二)

    在springMVC中,提交请求的数据是通过方法形参来接收的,从客户端请求的key/value数据,经过参数绑定,将key/value数据绑定到controller形参上,然后再controller就 ...

  4. 5.29 @Value{name}无效时怎么办Could not resolve placeholder ‘name22’ in value “${name22}” 错误解决

    springboot Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘name22’ in ...

  5. ES6 Template String 模板字符串

    模板字符串(Template String)是增强版的字符串,用反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量. 大家可以先看下面一段代码: $(&quo ...

  6. JavaScript Array 整理 - 元素操作

    整理一下Array对象中针对元素操作的方法. 分别是: concat (组合数组) join(数组转字符串) pop(删除最后一个元素) shift(删除第一个元素) push(在数组尾部添加新元素) ...

  7. Maven项目pom.xml配置详解

    maven项目pom.xml文件配置详解,需要时可以用作参考: <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  8. MTK刷机工具Flash_Tool部分4032错误解决办法

    MTK刷机工具Flash_Tool部分4032错误解决办法 先说明一点,这个办法不是万能的,我测试解决了以下两种情况下的4032: 1.本来正常的开发板,因为一次刷机失败后就一直变4032了 2.新开 ...

  9. 努比亚 N2(Nubia NX575J) 解锁BootLoader 并进入临时recovery ROOT

    工具下载链接:https://pan.baidu.com/s/1jJoK2Yq 备用下载链接:https://pan.baidu.com/s/1snjwLdz 密码:71rg 本篇教程教你如何傻瓜式解 ...

  10. USB 接口探测分类

    USB 接口探测分类 SDP (Standand Downstream Port) 标准下行接口 标准USB都支持的接口 这种端口的D+和D-线上具有15kΩ下拉电阻.限流值如上讨论:挂起时为2.5m ...