1.继承于NSObject

 class student: NSObject {

     var name : String?
var age : Int =
var friend : Int = init(name : String , age : Int , friend : Int) {
super.init()
self.name = name
self.age = age
self.friend = friend
} init(dict : [String : AnyObject]) {
super.init()
setValuesForKeys(dict)
} }

2.继承于UIView

(1)系统默认初始化方法

class LyContentView: UIView {

    //系统默认初始化方法
override init(frame: CGRect) {
super.init(frame: frame) //操作在这实现
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} }

(2)自定义初始化方法

注意:自定义初始化方法读是调用 super.init(frame: frame),而不是super.init()

class LyContentView: UIView {

    fileprivate var name : String?
fileprivate var age : Int init(frame: CGRect , name : String , age : Int) {
self.name = name
self.age = age
//这里必须用init(frame:,而不是init
super.init(frame: frame) //操作在这实现
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} }

3.UITableViewCell

import UIKit
//cell的标识
let ID = "LyTableViewCell" class LyTableViewCell: UITableViewCell { class func cellWithTableView(_ tableView : UITableView) -> LyTableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: ID) as? LyTableViewCell
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: ID) as? LyTableViewCell
}
return cell!
} override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier) //添加控件,一次性属性读在这实现
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

4.UICollectionViewCell

import UIKit
//cell的标识
private let ID = "LyCollectionViewCell" class LyCollectionViewCell: UICollectionViewCell { class func cellWithCollectionView(_ collectionView : UICollectionView , indexPath : IndexPath) -> LyCollectionViewCell {
collectionView.register(LyCollectionViewCell.self, forCellWithReuseIdentifier: ID)
return collectionView.dequeueReusableCell(withReuseIdentifier: ID, for: indexPath) as! LyCollectionViewCell
} override init(frame: CGRect) {
super.init(frame: frame)
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

5.便利构造器

extension UIColor {

    /* 类似于oc中的category/分类
1.convenience
2.最后别忘了调用自己一个默认的初始化方法self.init(....
*/ convenience init(r : CGFloat, g : CGFloat, b : CGFloat) {
self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: 1.0)
}
}

6.构造方法规则

/*
规则 1 :如果子类没有定义任何指定构造器,它将自动继承所有父类的指定构造器。
规则 2 :如果子类提供了所有父类指定构造器的实现——无论是通过规则 1 继承过来的,还是提供了自定义实现——它将 自动继承所有父类的便利构造器。
即使你在子类中添加了更多的便利构造器,这两条规则仍然适用
*/
class Food {
var name: String
init(name: String) {
self.name = name
}
convenience init() {
self.init(name: "[Unnamed]")
}
} /*
1.如果RecipeIngredient没有提供任何构造方法,那么它定义的属性必须给初始值,它默认继承Food的构造方法
*/
class RecipeIngredient: Food {
var quantity: Int =
init(name: String, quantity: Int) {
self.quantity = quantity
super.init(name: name)
}
override convenience init(name: String) {
self.init(name: name, quantity: )
}
} let oneMysteryItem = RecipeIngredient()
oneMysteryItem.quantity let oneBacon = RecipeIngredient(name: "Bacon")
let sixEggs = RecipeIngredient(name: "Eggs", quantity: )

7.可失败构造器

/*
1.在init后面+ ?
2.注意 :可失败构造器的参数名和参数类型,不能与其它非可失败构造器的参数名,及其参数类型相同。
3.注意 :成功不需要return
*/
struct Animal {
let species: String
init?(species: String) {
if species.isEmpty { return nil }
self.species = species
}
} class Person : NSObject {
var name : String?
var age : Int init?(age : Int) {
if age < { return nil }
self.age = age super.init()
} init(name : String , age : Int) {
self.name = name
self.age = age
super.init()
}
} let p = Person(age: -)//这里p为nil
p?.age

8.使用kvo,dict -> model

class Person: NSObject {

    //1.要设置为可选类型,要不就设置初始值
var name : String?
var age : Int = init(dict : [String : AnyObject]) {
super.init()
setValuesForKeys(dict)
} override func setValue(_ value: Any?, forKeyPath keyPath: String) {
super.setValue(value, forKeyPath: keyPath)
} override func setValue(_ value: Any?, forUndefinedKey key: String) { }
}

初始化方法,init,构造器的更多相关文章

  1. OC基础:继承.初始化方法,便利构造器 分类: ios学习 OC 2015-06-16 19:27 84人阅读 评论(0) 收藏

    继承: 1.单向继承,一个类只能有一个父类,一个父类可以有多个子类. 2.单向继承,基类(根类)是OSObject 3.子类可以继承父类的属性和方法 当父类的方法不满足子类的需求时,子类可以重写父类的 ...

  2. Object_C初始化方法, 遍历构造器

    //版本1 //- (id)init //{ //    work = @"工作"; //    return self; //} // //    //版本2:调用父类的init ...

  3. Objective-C学习笔记(二十二)——初始化方法init的重写与自己定义

    初学OC.对init这种方法不是非常了解.我们如今来分别对init方法进行重写以及自己定义,来加深对他的了解. 本样例也是用Person类来进行測试. (一)重写init方法. (1)在Person. ...

  4. 【iOS】swift init构造器

    这几天在使用 Swift 重写原来的一个运动社交应用 SportJoin. 为什么要重写呢? 首先因为实在找不到设计师给我作图; 其次, 我也闲不下来, 想找一些项目做, 所以只好将原来的代码重写了. ...

  5. python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)

    面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...

  6. Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)

    原来写了篇文章讲UITabBarController的用法,当时是从UIViewController跳转到UITabBarController页面,代码如下: 1 self.presentViewCo ...

  7. OC:继承、初始化方法、便利构造器

    A继承 的作用就是为了,节省代码.     继承 :子类会继承父类 里面所有的内容     思想 :凡是继承过来的实例变量和方法 都是自己的(是从父类遗传过来的)     继承的使用场景 : 当我们多 ...

  8. Swift - 类初始化和反初始化方法(init与deinit)

    1,init():类的初始化方法(构造方法) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

  9. oc实例变量初始化方法

    1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx 2 使用实例功能类方法,默认初始化方法 + setName:xxx age:xxx3 使用实例初始化方法 ...

随机推荐

  1. CYPHER 语句(Neo4j)

    CYPHER 语句(Neo4j) 创建电影关系图 新增 查找 修改 删除 导入 格式转换 创建电影关系图 CREATE (TheMatrix:Movie {title:'The Matrix', re ...

  2. iris数据集预测

    iris数据集预测(对比随机森林和逻辑回归算法) 随机森林 library(randomForest) #挑选响应变量 index <- subset(iris,Species != " ...

  3. 201771010123汪慧和《面向对象程序设计Java》第十一周实验总结

    一.理论部分 1.栈 (1)栈是一种特殊的线性表,是一种后进先出的结构.(2)栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶,表头称为栈底.(3)栈的物理存储可以用顺序存储结构,也可以用链式 ...

  4. 动态类型识别&动态创建

    以下大部分内容摘自<windows程序设计 第2版> 王艳平 张铮 编著 动态类型识别:在程序运行过程中,辨别对象是否属于特定类的技术. 应用举例:函数辨别参数类型.需要针对对象的类编写特 ...

  5. 6.react 基础 - 关于 react 开发 的原则

    1. 声明式开发 通过绑定元素 在数据变更时 对元素进行动态渲染 2. 可以与其他框架并存 不在React的绑定元素内, 可以使用其他框架 如 ( vue jQuery 等 ) 进行元素操作 3. 组 ...

  6. windows 安装svn 要点(非安装步骤)

      http://www.visualsvn.com/files/VisualSVN-Server-2.5.6.msi 下载服务端 windows2008搭建svn 1.360软件管家下载 Visua ...

  7. 苹果浏览器移动端click事件延迟300ms的原因以及解决办法

    这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题 —— 当时的网站都是为大屏幕设备所设计的.于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点 ...

  8. pyQt 流布局的一个例子

    瀑布流布局 from PyQt5.QtCore import QPoint, QRect, QSize, Qt from PyQt5.QtWidgets import (QApplication, Q ...

  9. UVA 658 状态压缩+隐式图+优先队列dijstla

    不可多得的好题目啊,我看了别人题解才做出来的,这种题目一看就会做的实在是大神啊,而且我看别人博客都看了好久才明白...还是对状态压缩不是很熟练,理解几个位运算用了好久时间.有些题目自己看着别人的题解做 ...

  10. springboot的http监控接口启动器的配置

    基于SpringBoot框架企业级应用系统开发全面实战()->03.07_http监控_recv.mp4 监控接口启动器 自定义监控接口启动器的配置 ====================== ...