swift初始化
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初始化的更多相关文章
- Swift - 初始化Initialization
Ps:苹果官方文档-Initialization 自定义控件初始化中常见的几种错误(指定构造器和便利构造器)截图: 意思是:1.没有添加重写符override(重写父类方法)2.没有重写initW ...
- swift 初始化
知识点总结: 1.结构体 1.1.默认初始化方法:1.空初始化方法:2.成员初始化方法 struct Person{ var name = "tom" var age = } le ...
- [swift]初始化方法自己主动继承
子类默认不会继承父类的初始化方法,然而,假设某种条件满足的话.父类的初始化方法还是能够继承给子类.在通常情况下,这意味着你不必复写父类的初始化方法.在安全的前提下能够以最低的代价继承父类的初始化方法. ...
- Swift - 初始化方法返回nil表示初始化失败
自Swift1.1开始,初始化init方法便有返回nil的能力.我们可以在init声明的时候在其后面加上一个 ? 或者 ! 来表示初始化失败时可能返回nil. 比如,给Int类添加一个将字符串初始化成 ...
- Swift初始化空字符串
为了构造一个很长的字符串,可以创建一个空字符串作为初始值.可以将空的字符串字面量赋值给变量,也可以初始化一个新的String 实例: var emptyString = "" // ...
- Swift的初始化方法
我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的. 其实就是安全.在Objective-C中,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证 ...
- Swift从入门到精通第十一篇 - 初始化 初识
初始化(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 初始化 初始化是类.结构体.枚举生成实例的过程,为该类的每个存储属性设置初始值,有些在实例使用前的设置或初始化也可在此实现 ...
- Swift语法总结补充(一)
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1. 可选类型是一种类型,String?就是Optional<String>,所以函数参数也可以声明为它2 ...
- Swift互用性: 使用Objective-C特性编写Swift类(Swift 2.0版)-b
本节包括内容: 继承Objective-C的类(Inheriting from Objective-C Classes) 采用协议(Adopting Protocols) 编写构造器和析构器(Writ ...
随机推荐
- Python 45 长度及颜色单位 、字体样式 、文本样式 、背景样式 、css基础选择器
一:长度及颜色单位 长度单位 px(像素) in(英寸) pt(点),一个标准的长度单位,1pt = 1/72in mm(毫米) cm ...
- C# 多线程系列(三)
线程池 创建线程需要时间,如果有不同的小任务要完成,就可以事先创建许多线程,在应完成这些任务时发出请求.这个线程数最好在需要更多线程时增加,在需要释放资源时减少. 不需要自己创建这样的一个列表.该列表 ...
- Android Activity has leaked window that was originally added
今天调试程序时log中突然打印这样的错误,但是程序并没有crash,为了不放过一个错误,我决定调查一下. 当时是离开一个activity,然后提示是否退出此界面,接下来就打印此错误: - ::): A ...
- linux 新添加的硬盘格式化并挂载到目录下
需求: 新增加一块硬盘sdb,将sdb分区,只分一个区,格式化,挂载到目录/ssd下. 1. 查看现在已有的分区状态 # df –l 图中显示,没有看到sdb硬盘 2. 查看服务器安装的硬盘状态( ...
- 小功能__tab实录
作为一个没有js基础的人来说,写一个小功能确实麻烦,也很累,从一个demo中发现details标签完美的实现菜单折叠功能,而不用费劲写好多li.div.js.发现html也是好厉害的.看来以后回家要多 ...
- 11.02 跳过表中n行
select x.enamefrom (select a.ename,(select count(*)from emp bwhere b.ename <=a.ename) as rnfrom e ...
- centos7 删除libc.so.6 紧急救援
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz tar zxvf glibc-2.18.tar.gz cd glibc-2.18 mkdir b ...
- PAT_A1109#Group Photo
Source: PAT A1109 Group Photo (25 分) Description: Formation is very important when taking a group ph ...
- 【剑指Offer】38、二叉树的深度
题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路: 本题相对比较简单.根据二叉树深度的定义 ...
- [系统资源攻略]IO第二篇
IO 磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴.寻轨等.访问硬盘和访问内存之间的速度差别是以数量级来计算 ...