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. ES6 之 函数的扩展 尾调用以及尾递归

    函数参数的默认值 function log(x, y) { y = y || 'world' console.log(x + ' ' + y); } log('hello') // hello wor ...

  2. Tutorial: Create a Blinky ARM test project(创建一个闪灯的arm测试项目)

    Background ref : Tutorial: Create a Blinky ARM test project If you are new to ARM development, it is ...

  3. 洛谷P1257(暴力超时)

    1.先输入再求勾股定理会超时 2.需要一边输入一边求. #include<iostream> #include<cmath>#include<cstdio> usi ...

  4. Django2.0——实现简易登陆、注册

    思路: 实现简易的登陆.注册,我们至少需要三个HTML页面,一个主页面.一个登陆界面.一个注册界面.为了存储和校验用户的账号和密码,我们需要写一个模型类(用于映射到数据库).两个form类(一个登陆. ...

  5. 吴裕雄--天生自然MySQL学习笔记:MySQL简介

    MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...

  6. 吴裕雄--天生自然TensorFlow2教程:numpy [ ] 索引

    import tensorflow as tf a = tf.ones([1, 5, 5, 3]) a.shape a[0][0] numpy : 索引 a = tf.random.normal([4 ...

  7. UML-如何进行面向对象设计?

    1.开发者如何设计对象? 1).直接编码 2).uml图,然后编码 3).uml图,不编码 绘图要轻量的 2.并行创建若干模型 如:5分钟画交互图,5分钟画类图.反复交替 3.选择什么样的UML CA ...

  8. css 传数据套路

    <input type=hidden> 那么该标签就不会显示 但是我们可以用这个标签储存数据 这是一个利用标签元素隐藏

  9. Python opencv计算批量图片的BGR各自的均值

    #coding:utf-8 #第一种方式 很慢很慢 自己写的如何计算均值 ''' import cv2 import os def access_pixels(frame): print(frame. ...

  10. JavaSE--异常信息打印

    最近项目用到第三方jar包,抛出运行时异常,打在日志用的 方法.得到的错误描述并不详尽,遂想到平时用的 发现其可以重定向输出,平时用流多是和文件相关,但是在当前背景下用文件打开流显得不是很合适,翻了下 ...