前言:通过学习与研究swift3.0的官方文档关于初始化这部分可以总结为一句话:类与结构是确保一个类型的实例可以使用之前,其所有存储属性都得到了正确的赋值。

一,结构的初始化1

 struct FirstStruct{

     let b:Int
let c:Int init() {
b =
c = }
} let fs = FirstStruct()

解析:这个结构中b,c这两个存储属性并未赋初值,而是在init初始化器(相当于Java中的构造函数)中赋初值。

二,结构的初始化2

 struct SecondStruct{

     let b:Int
let c:Int } let ss = SecondStruct(b:,c:)

解析:结构中,编译器会自动生成memberwise的初始化器,因此在调用结构时必须传入初始化值。

三,结构中初始化错误示例

 //struct ThirdStruct{
//
// let b:Int
// let c:Int
//
// init() {
// b = 0
// }
//}
//
//let ts = ThirdStruct(c:3)

注意:结构中声明了初始化器,编译器将不会给我们添加memberwise的初始化器,(原理和Java的空构造函数一致)上面这个例子是不能通过编译的。

四,结构中init可以通过self关键字调用其他的init

 struct FourthStruct{

     let b:Int
let c:Int init() { self.init(b:) }
init(b:Int){
c =
self.b = b
}
} let fos = FourthStruct()

五,类初始化错误示例

 //错误示例
//class SecondClass{
//
// let b:Int
// let c:Int
//
//}
//
//let sc = SecondClass(b:2,c:3)

解析:类里面也可以通过声明init初始化器,若不提供初始化器,编译器不会提供默认的初始化器

六,类的(Designated init)初始化器

 class Parent2{
var name:String
var height:Int
init(name:String,height:Int){
self.name = name
self.height = height
}
}
let p2 = Parent2(name:"zs",height:)
p2.height
p2.name

解析:没有特殊的修饰符的init就是专门的(Designated init)初始化器,主要的作用就是确保所有的存储属性得到初始化

七,Designated init一般只有一个,可以有多个,根据你调用时赋值的不用而调用不同的初始化器

 class Parent3{
var name:String
var sex:String
init(name:String,sex:String){
self.name = name
self.sex = sex
}
init(name:String){
self.name = name
sex = "男"
} } let p3 = Parent3(name:"zs",sex:"女")
let p4 = Parent3(name:"ls")
p3.sex
p4.sex

八,类的便利(convenience)初始化器

class Parent3{
var name:String
var sex:String
init(name:String,sex:String){
self.name = name
self.sex = sex
}
convenience init(name:String){
self.init(name:name,sex:"男")
} convenience init(){
self.init(name:"zs")
} } let p3 = Parent3(name:"zs")
let p4 = Parent3()
p3.sex
p4.sex

解析:通过在初始化器前声明convenience关键字可以声明一个便利初始化器,它的作用是方便创建对象时使用,但它必须直接或间接调用专门初始化器

九,子类的专门初始化器必须调用父类的专门初始化器,子类不能调用父类的便利初始化器

 class Parent4{
var name:String
var sex:String
init(name:String,sex:String){
self.name = name
self.sex = sex
} convenience init(name:String){
self.init(name:name,sex:"男")
}
} //-----------------------------------------------
class Child4:Parent4{
var age:Int
init(age:Int) {
self.age = age
//super.init(name: "ls")错误示例
super.init(name: "zs",sex:"妖") }
convenience init(){
self.init(age:)
}
} let c4 = Child4()
c4.name

Swift中类与结构的初始化的更多相关文章

  1. swift中类与结构体

    写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...

  2. swift 类 与 结构体

    这两天突然有人问我  swift里面 类和 结构体  有什么区别? 说实在的本人目前不太看好swift,相信很多人也是,oc 都 很成熟了. 本人目前不打算深入了解swift的原因swift  语言 ...

  3. Swift中类的初始化器与继承

    初始化是类,结构体和枚举类型实例化的准备阶段.这个阶段设置这个实例存储的属性的初始化数值和做一些使用实例之前的准备以及必须要做的其他一些设置工作. 通过定义构造器(initializers)实现这个实 ...

  4. Swift 中类的初始化器与继承

    首先,Swift 为类定义了两种初始化器来确保类中所有的储存属性都能得到一个初始化值.这两种初始化器就是「指定初始化器」(Designated Initializer)与「便利初始化器」(Conven ...

  5. swift 类和结构体

    1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字 ...

  6. Swift类和结构体

    在C++中,相信不会有太多人去详细考究结构体和类的区别,因为二者关系实在不大.但在Swift中,结构体和类的关系非常大,它们的组成部分都包括:初始化器.实例方法.实例属性.类型属性.类型方法等等:二者 ...

  7. Swift中类的使用

    主要内容 类的介绍和定义 类的属性 类的构造函数 一. 类的介绍和定义 Swift也是一门面向对象开发的语言 面向对象的基础是类,类产生了对象 在Swift中如何定义类呢? class是Swift中的 ...

  8. Linux C中结构体初始化

          在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated in ...

  9. swift中的结构体和枚举

    Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...

随机推荐

  1. IOS 网络-深入浅出(一 )-> 三方SDWebImage

    首要我们以最为常用的UIImageView为例介绍实现原理: 1)UIImageView+WebCache:  setImageWithURL:placeholderImage:options: 先显 ...

  2. React Native之坑总结(持续更新)

    React Native之坑总结(持续更新) Genymotion安装与启动 之前我用的是蓝叠(BlueStack)模拟器,跑RN程序也遇到了一些问题,都通过搜索引擎解决了,不过没有记录. 但是Blu ...

  3. Java中serialVersionUID的解释及两种生成方式的区别(转载)

    转载自:http://blog.csdn.net/xuanxiaochuan/article/details/25052057 serialVersionUID作用:        序列化时为了保持版 ...

  4. Linq语法学习

    关键词: select from where in into join on equals orderby descending DefaultIfEmpty() thenby submitChang ...

  5. Mac上安装MySQL记录

    下载最新的MySQL社区版 官方下载地址:http://dev.mysql.com/downloads/mysql/ 为了安装更方便,建议下载dmg安装包. 最新的版本是5.7.9. 安装MySQL ...

  6. shell两数之间的算术运算

    #!/bin/bash read -p "请输入第一个数:" a read -p "请输入第二个数:" b echo "$a+$b=$[$a+$b]& ...

  7. Java基础知识笔记(八:集合类)

    目录 1  集合类简介  2  List介绍及简单使用 2.1  LinkedList介绍及简单使用 2.2  ArrayList介绍及简单使用 2.3  Vector介绍及简单使用 2.3.1  S ...

  8. 理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  9. cookie 跨域访问的解决方案

    Cookie 同域单点登录  最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录.    ...

  10. 【转】XenServer架构之XAPI

    一.XAPI对资源池的管理 作为XenServer的管理工具集,XAPI管理XenServer的主机,网络和存储.不管是OpenStack还是CloudStack,如果使用XenServer作为虚拟化 ...