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. 应用JavaScript搭建一个简易页面图片无缝滚动效果

    页面图片无缝滚动JavaScript原理:移动的区块包含图片内容,区块相对父级元素进行定位脱离文档流.再令区块的left值每隔固定的时间进行等量减少(或增大)从而实现区块的匀速运动.由于每次间隔移动的 ...

  2. Linux学习教程

    前言 “Linux?听说是一个操作系统,好用吗?” “我也不知道呀,和windows有什么区别?我能在Linux上玩LOL吗” “别提了,我用过Linux,就是黑乎乎一个屏幕,鼠标也不能用,不停地的敲 ...

  3. shiro英语

    Security Manager安全管理人员 Tutorial 辅导的 transient 短暂的 Cipher 密码 Memory 记忆 Access 访问Handy Hint 方便提示separa ...

  4. RFC1867 HTTP file upload

    RFC1867 HTTP file upload RFC1867 is the standard definition of that "Browse..." button tha ...

  5. 前端-git思维导图笔记

    命令汇总 git config配置本地仓库 常用git config --global user.name.git config --global user.email git config --li ...

  6. 实验0 安装GLUT包及工程的创建与运行

    下面将对Windows下在MicroSoft Visual C++2010(简称MSVC)环境下的OpenGL编程进行简单介绍. 1.安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们 ...

  7. java StringUtils

    /** * */ package com.sign.utils; import java.util.regex.Pattern; /** * @author Administrator * creat ...

  8. 团体程序设计天梯赛-练习集-L1-035. 情人节

    L1-035. 情人节 以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家.第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”.现给出此贴下点赞的朋友名单,请你找出那两位要请客 ...

  9. shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作

    mysql  -hhostname -Pport -uusername -ppassword  -e  相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作m ...

  10. LINUX KERNEL SPINLOCK使用不当的后果

    LINUX KERNEL SPINLOCK使用不当的后果 spinlock(自旋锁)是内核中最常见的锁,它的特点是:等待锁的过程中不休眠,而是占着CPU空转,优点是避免了上下文切换的开销,缺点是该CP ...