前言:通过学习与研究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. 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希

    据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之 ...

  2. Mybatis 查不到数据,总是返回Null

    mybatis突然查不到数据,查询返回的都是Null,但是 select count(*) from xxx查询数量,返回却是正常的. Preparing: SELECT id,a9004,a9005 ...

  3. win 7下建立FTP

    1.安装FTP服务 鼠标桌面右击个性化-卸载程序-打开或关闭windows功能 2.在IIS控制面板里添加FTP站点 下一步 下一步 鼠标右击 下一步 下一步 3.配置ftp站点 4.测试站点是否正常 ...

  4. 手动配置三台虚拟机pacemaker+corosync并添加httpd服务

    创建三台虚拟机,实验环境:centos7.1,选择基础设施服务安装. 每台虚拟机两块网卡,第一块为pxe,第二块连通外网,手动为两块网卡配置IP.网关,使它们都能ping通外网并可以互相通过hostn ...

  5. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

  6. Hemodynamic response function (HRF) - FAQ

    Source: MIT - Mindhive What is the 'canonical' HRF? The very simplest design matrix for a given expe ...

  7. C#进阶系列——WebApi 路由机制剖析:你准备好了吗?

    前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分. 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/Index,那么你只需要配置一个默认路由就能简单搞定: ...

  8. 测试docker不同主机间容器互相访问

    测试服务器(centos6.5):192.168.16.70 网卡:eth0192.168.16.74 网卡:eth0第一步,分别在2台机器执行: yum install docker service ...

  9. git 分支管理

    本地主分支提交到远程分支 git push origin master:branch-test 本地分支提交到远程主分支 git push origin branch-test:master 切换分支 ...

  10. Stack的三种含义

    作者: 阮一峰 日期: 2013年11月29日 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词 ...