文档章节

[swift]-类的构造函数

XJDomain
 XJDomain
发布于 2016/08/01 15:04
字数 737
阅读 13
收藏 0
点赞 0
评论 0

1:两种基本的构造函数
 

01-自定义构造函数:传入基本参数

> 01-init(name : String, age : Int) {
     self.name = name 
     self.age = age
}

02-自定义构造函数:传入一个字典

init(dict : [String : AnyObject]) {
        super.init()
        // kvc 调用对象的KVC方法字典转模型
        //self.setValuesForKeysWithDictionary(dict)
        setValuesForKeysWithDictionary(dict)
    }

// 注意:凡是使用kvc了,都要重写:override func setValue(value: AnyObject?, forUndefinedKey key: String) {}  ;因为字典里某些字段不是类的属性就可以不会报错了

override func setValue(value: AnyObject?, forUndefinedKey key: String) {}

 

知识点1:

// as? 最终转成的类型是一个可选类型
// as! 最终转成的类型是一个确定的类型,非可选类型

 

知识点2:

在类里调用对象的方法如kvc方法:self可以省略,//self.setValuesForKeysWithDictionary(dict)  简写成:setValuesForKeysWithDictionary(dict)

 

知识点3:

一般情况下,super.init(),我们不调用,系统会自动调用,系统调用是在该方法最后调用,但是当我们调用系统的kvc方法的时候,我们一定要确保该对象已经创建了,所以我们需要提前手动调用super.init()这个方法,如:

init(dict : [String : AnyObject]) {
        // 提前调用super.init(),确保该对象已经创建了,不然怎么调用对象的一个kvc的方法呢
        // 一般系统会默认调用super.init(),都是在该方法的最后的地方调用,这时候已经晚了,我们需要在调用kvc方法前就需要调用
        super.init()
        // kvc 调用对象的KVC方法字典转模型
        //self.setValuesForKeysWithDictionary(dict)
        setValuesForKeysWithDictionary(dict)
    }

      

2:代码演示:

import UIKit

class Person: NSObject {
    var name : String?
    var age : Int = 0
    
    // 在构造函数中,如果没有明确super.init(),name系统会自动帮我们调用super.init()
    override init() {
       //super.init()
        print("1111111")
    }
    
    
    // 自定义构造函数:传入基本参数
    init(name : String,age : Int) {
        print("22222")
        self.name = name
        self.age = age
    }
    
    
    // 自定义构造函数:传入一个字典
//    init(dict : [String : AnyObject]) {
//        let tempName = dict["name"]
//        //tempName是一个AnyObject?类型,转成String?
//        // as? 最终转成的类型是一个可选类型
//        // as! 最终转成的类型是一个确定的类型,非可选类型
//        name = tempName as? String
//        
//        
////        let tempAge = dict["age"]
////        //age = tempAge as! Int
////        let tempAge1 = tempAge as? Int
////        if  tempAge1 != nil {
////            age = tempAge1!
////        }
////        print(age)
//        
//        if let tempAge = dict["age"] as? Int {
//            age = tempAge
//        }
//    }
    
    
    init(dict : [String : AnyObject]) {
        // 提前调用super.init(),确保该对象已经创建了,不然怎么调用对象的一个kvc的方法呢
        // 一般系统会默认调用super.init(),都是在该方法的最后的地方调用,这时候已经晚了,我们需要在调用kvc方法前就需要调用
        super.init()
        // kvc 调用对象的KVC方法字典转模型
        //self.setValuesForKeysWithDictionary(dict)
        setValuesForKeysWithDictionary(dict)
    }
    
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
}


//let p = Person()
//let p1 = Person(name: "sky", age: 19)
//if let name = p1.name {
//    print(name)
//}
//print(p1.age)


let p2 = Person(dict: ["name" : "mike","age" : 18,"height" : 1.88])
print(p2.age)
if let name = p2.name {
    print(name)
}



意见反馈邮件:1415429879@qq.com
欢迎你们的阅读和赞赏、谢谢!

 

 

© 著作权归作者所有

共有 人打赏支持
XJDomain
粉丝 15
博文 112
码字总数 44060
作品 0
嘉定
高级程序员
XZ_Swift之Swift面向对象

Swift面向对象 1、关于命名空间 在 Swift 中,默认同一个项目中,所有的类都是共享的,可以直接访问,不需要 import 所有对象的属性 var,也可以直接访问到 在Swift中,所有类都默认有一个命名空间...

understand_XZ的博客
2017/12/22
0
0
【iOS】Swift类的继承、构造方法、析构器等复习

构造方法内容会多一些,涉及Swift中构造的一些规则与概念。这次写了7个Person来复习,外加名人XiaoMing。 Mark:Playground真是个好东西,特别练习demo写Swift时,实时显示真是大赞! 一、继...

xn4545945
2014/09/23
0
0
Swift3.0 功能一(持续更新)

相关知识点: 修改项目名称两种方式 1.Bundle name 2.Bundle display name try 三种处理异常的方式

袭锐
2016/10/21
0
0
《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之

《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-CAPI映射 原创文章,欢迎转载。转载请注明:关东升的博客 Swift与Objective-C API映射 在混合编程...

智捷课堂
2016/02/26
43
0
《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-CAPI映射

原创文章,欢迎转载。转载请注明:关东升的博客 Swift与Objective-C API映射 在混合编程过程中Swift与Objective-C调用是双向的,由于不同语言对于相同API的表述是不同的,他们之间是有某种映...

tony关东升
06/26
0
0
类的构造函数

类的构造函数 构造函数的介绍 构造函数类似于OC中的初始化方法:init方法 默认情况下载创建一个类时,必然会调用一个构造函数 即便是没有编写任何构造函数,编译器也会提供一个默认的构造函数。...

别情花如依丶
2016/12/22
1
0
Swift4.0基础知识回顾

简单介绍一下Swift Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序,Swift语言让应用开发更简单、更快、更稳定,确保最终应用有着更好的质量更多了解Swift可以去《The...

博行天下
2017/12/06
0
0
Swift中构造方法的解析

Swift中构造方法的解析 一、引言 构造方法是一个类创建对象最先也是必须调用的方法,在Objective-C中,开发者更习惯称这类方法为初始化方法。在Objective-C中的初始化方法与普通函数相比除了...

珲少
2016/04/15
374
0
Swift2.2 failable initializer允许提前返回nil以及和Java的不同

发现swift和java有一个完全不一样的地方 在swift中, 子类必须先初始化子类的所有属性, 然后才能调用父类的构造器. 而在java中.super调用必须出现在构造函数的第一行. java代码 对应的swift代...

cyper
2016/05/27
37
0
Swift构造函数

1.构造函数: 给属性开辟内存空间 给属性设置初始值 最终目标创建一个对象 用init构造函数 参数有可能不同 (1)//定义属性使用var 是我们开发需要的 var name: String //可选属性 - 默认等...

KevinEmily
2016/03/06
62
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据教程(2.13):keepalived+nginx(多主多活)高可用集群搭建教程【自动化脚本】

上一章节博主为大家介绍了目前大型互联网项目的keepalived+nginx(主备)高可用系统架构体系,相信大家应该看了博主的文章对keepalived/nginx技术已经有一定的了解,在本节博主将为大家分享k...

em_aaron
2分钟前
0
0
Git 2.18版本发布:支持Git协议v2,提升性能

在最新的官方 Git 客户端正式版2.18中添加了对 Git wire 协议 v2 的支持,并引入了一些性能与 UI 改进的新特性。在 Git 的核心团队成员 Brandon Williams 公开宣布这一消息前几周,Git 协议 ...

六库科技
7分钟前
0
0
Java8新特性之接口

在JDK8以前,我们定义接口类中,方法都是抽象的,并且不能存在静态方法。所有的方法命名规则基本上都是 public [返回类型] [方法名](参数params) throws [异常类型] {}。 JDK8为接口的定义带...

developlee的潇洒人生
45分钟前
0
0
aop + annotation 实现统一日志记录

aop + annotation 实现统一日志记录 在开发中,我们可能需要记录异常日志。由于异常比较分散,每个 service 方法都可能发生异常,如果我们都去做处理,会出现很多重复编码,也不好维护。这种...

长安一梦
55分钟前
2
0
将博客搬至CSDN

AHUSKY
今天
1
0
Python web框架Django学习(1)

1.Django简介 (1)Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django是一个开放源代码的Web应用框架,由Python写成。 (2...

十年磨一剑3344
今天
0
0
Databook-数据之书

Databook-数据之书 用于数据分析的Jupyter Notebooks。 不需购买服务器,快速开始自己的数据分析过程。 源码:https://github.com/openthings/databook 作者:openthings,https://github.co...

openthings
今天
5
0
Python PIPEs

https://www.python-course.eu/pipes.php https://www.tutorialspoint.com/python/os_pipe.htm

zungyiu
今天
1
0
gRPC学习笔记

gRPC编程流程 1. proto文件定义 proto文件用于定义需要通过gRPC生成的接口,可以理解为接口定义文档 2. 通过构建工具生成服务基类代码-Maven或Gradle 3. 服务端开发 服务端实现类须实现通过构...

OSC_fly
今天
0
0
Docker Mac (三) Dockerfile 及命令

Dockerfile 最近学习docker的时候,遇到一件怪事,关于docker镜像可能会被破坏,还不知道它会有此措施 所以需要了解构建Dockerfile的正确方法 Dockerfile是由一系列命令和参数构成的脚本,这些命...

___大侠
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部