Swift中类与结构的初始化
前言:通过学习与研究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中类与结构的初始化的更多相关文章
- swift中类与结构体
写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...
- swift 类 与 结构体
这两天突然有人问我 swift里面 类和 结构体 有什么区别? 说实在的本人目前不太看好swift,相信很多人也是,oc 都 很成熟了. 本人目前不打算深入了解swift的原因swift 语言 ...
- Swift中类的初始化器与继承
初始化是类,结构体和枚举类型实例化的准备阶段.这个阶段设置这个实例存储的属性的初始化数值和做一些使用实例之前的准备以及必须要做的其他一些设置工作. 通过定义构造器(initializers)实现这个实 ...
- Swift 中类的初始化器与继承
首先,Swift 为类定义了两种初始化器来确保类中所有的储存属性都能得到一个初始化值.这两种初始化器就是「指定初始化器」(Designated Initializer)与「便利初始化器」(Conven ...
- swift 类和结构体
1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字 ...
- Swift类和结构体
在C++中,相信不会有太多人去详细考究结构体和类的区别,因为二者关系实在不大.但在Swift中,结构体和类的关系非常大,它们的组成部分都包括:初始化器.实例方法.实例属性.类型属性.类型方法等等:二者 ...
- Swift中类的使用
主要内容 类的介绍和定义 类的属性 类的构造函数 一. 类的介绍和定义 Swift也是一门面向对象开发的语言 面向对象的基础是类,类产生了对象 在Swift中如何定义类呢? class是Swift中的 ...
- Linux C中结构体初始化
在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated in ...
- swift中的结构体和枚举
Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...
随机推荐
- redux-devtools 浏览器修改Store值
1. npm install --save-dev redux-devtools 2. npm instal. --redux-devtools-dock-monitor 3. 创建DevTools ...
- iOS 获取当前点击的坐标
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSSet *allTouch ...
- Android LocalBroadcastManager 的使用总结
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6048369.html 本文出自[赵彦军的博客] 前言 在Android中,Broadcast是一种广泛运用的 ...
- redis数据结构存储SDS设计细节(redis的设计与实现笔记)
redis虽说是用C语言开发的,但是redis考虑了性能.安全性.效率性.功能等要,redis底层存储字符串实现,自己实现了名为简单动态字符串(Simple dynamic string)简称SDS的 ...
- 常用兼容浏览器js
功能:取得鼠标坐标.取得IE版本 一. 准备工作 1. 点击此下载 相关文件 二. 在浏览器中运行 compatJS.html 文件,点击相关功能按钮,即可看到效果
- 【原】移动web滑屏框架分享
本月26号参加webrebuild深圳站,会上听了彪叔的对初心的讲解,“工匠精神”这个词又一次被提出,也再次引起了我对它的思考.专注一个项目并把它做得好,很好,更好...现实工作中,忙忙碌碌,抱着完成 ...
- HTML 学习笔记 JavaScript(call方法详解)
http://www.cnblogs.com/f-dream/p/4950918.html
- [LeetCode] Ugly Number 丑陋数
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...
- Docker 简介
1.什么是Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 机器上.使用Docker可以让每个应用彼此相 ...
- 如何创建一个简单的Visual Studio Code扩展
注:本文提到的代码示例下载地址>How to create a simple extension for VS Code VS Code 是微软推出的一款轻量级的代码编辑器,免费,开源,支持多种 ...