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 ...
随机推荐
- NOIP 2015 DAY2
跳石头 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块 ...
- 关于MVC4.0版本以上的RegisterBundles用法
public class BundleConfig { //新建了一个项目文件,打开App_Start下的BundleConfig看看, public static void RegisterBund ...
- 【SQL】通过rowid查找及删除重复记录
新建T表如下: SQL> select * from t; X Y ---------- -- 1 a 1 a 1 a 2 ...
- dubbo之直连提供者
在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点对点,不影响 B 接口从注册中心获 ...
- 装X数学:高雅的数学表示
采用高雅的数学描述 转自于:研究生之路怎么走? 高雅的数学描述会提高你论文的等级和加强评审人对你基础功底的认可.例如泛函分析.集合.测度.度量空间和拓扑空间.现代代数.微分几何等数学方面的 ...
- .NET 在序列化时使用全小写的属性名
基于某些奇怪的需求,需要将一些对象序列化后输出,而且属性名又必须为小写形式. 解决过程 说到在 .NET 平台上序列化操作,那么第一个想到的应该就是 Json.NET 家的 Newtonsoft.Js ...
- 【sqli-labs】 less12 POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入)
加个双引号 通过报错信息猜测SQL语句 , 将括号闭合掉,通过注释后面的条件登录
- C# MVC 返回html内容
var ss = Server.MapPath(""); //C:\Users\Administrator\Desktop\Csharp测试程序\TestMVC\TestMVC s ...
- hadoop 安装问题总结
安装启动步骤 [英语好的,直接手把手跟着来] http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Sing ...
- HttpRunnerManager 搭建使用方法
HttpRunnerManager Design Philosophy 基于HttpRunner的接口自动化测试平台: HttpRunner, djcelery and Django_. HttpRu ...