文档章节

构造函数- -KVC构造函数

TaciturnKnightYQ
 TaciturnKnightYQ
发布于 2015/12/04 13:23
字数 623
阅读 28
收藏 0
点赞 0
评论 0

构造函数---KVC构造函数

/**

    构造函数  建立一个`对象`

    1. 给属性分配空间

    2. 设置初始数值


    Swift 中构造函数`` init


    重载:OC中没有重载的概念


    函数名相同,参数的个数&类型不同,叫做重载,是面向对象设计语言必备标志!

    OC 中使用 initWithXXX的方式替代

*/

//  Person.swift

import UIKit
class Person: NSObject {
    
    // 对象的属性就是应该可变的
    // 可选项,允许变量为空,var 的默认值就是 nil
    // 在 iOS 开发中,所有的属性是延迟加载的
    var name: String?
    
    // age 和 KVC 不兼容,OC中Int属于基本数据类型,不存在 `nil` 的概念
    var age: Int = 0
    
    /// KVC 的构造函数,用字典设置模型
    init(dict: [String: AnyObject]) {
        
        // KVC 是 OC 特有的,本质是在运行时,动态的给`对象`发送 `setVaule:forKey:` 消息
        // 设置数值 - 调用 super.init 保证对象已经被创建完成
        super.init()
        
        // KVC 的设置数值
        setValuesForKeysWithDictionary(dict)
    }
    
   
}


//  ViewController.swift

import UIKit
// 提示:在 Swift 中,默认所有的属性和方法,都是全局共享的,不需要 import,可以直接使用
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let p = Student(dict: ["name": "zhangsan", "age": 19])
       print("\(p.name) --- \(p.age)")
     
    }
}





KVC函数调用顺序调试

//  Person.swift
import UIKit
class Person: NSObject {
    
    // 对象的属性就是应该可变的
    // 可选项,允许变量为空,var 的默认值就是 nil
    // 在 iOS 开发中,所有的属性是延迟加载的
    var name: String?
    
    // age 和 KVC 不兼容,OC中Int属于基本数据类型,不存在 `nil` 的概念
    var age: Int = 0
    
    /// KVC 的构造函数,用字典设置模型
    init(dict: [String: AnyObject]) {
        
        // KVC 是 OC 特有的,本质是在运行时,动态的给`对象`发送 `setVaule:forKey:` 消息
        // 设置数值 - 调用 super.init 保证对象已经被创建完成
        super.init()
        
        // KVC 的设置数值
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        print("forKey \(key) - \(value)")
        
        super.setValue(value, forKey: key)
    }
    
    /// 默认的 setValue forUndefinedKey 方法如果出现未定义的key会抛出 `NSUndefinedKeyException`异常,让程序崩溃
    /// 如果一旦重写了此方法,同时不 super,不调用父类默认的方法!
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        print("forUndefinedKey \(key) \(value)")
    }
}


//  ViewController.swift
import UIKit
// 提示:在 Swift 中,默认所有的属性和方法,都是全局共享的,不需要 import,可以直接使用
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let p = Student(dict: ["name": "网舞", "age": 19, "title": "hahah", "no": "009"])
        print("\(p.name) --- \(p.age)")
    }
}








© 著作权归作者所有

共有 人打赏支持
TaciturnKnightYQ
粉丝 4
博文 62
码字总数 26671
作品 0
高级程序员
【swift】--便利构造函数

【Swift大法好:昨天看博客的时候看到,有说Swift以后有可能开发安卓软件了。cool。。。】 默认情况下,所有的构造方法都是指定构造函数 关键字修饰的构造方法就是便利构造函数 便利构造函数...

卡奇匠
2016/03/04
1K
0
类的构造函数

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

别情花如依丶
2016/12/22
1
0
13-Swift中类的构造函数

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

不孤独的美食家
2016/08/15
16
0
convenience - 便利构造函数

convenience - 便利构造函数 默认情况下,所有的构造方法都是指定构造函数 关键字修饰的构造方法就是便利构造函数 便利构造函数具有以下特点: 可以返回 只有便利构造函数中可以调用 便利构造...

TaciturnKnightYQ
2015/12/04
173
0
[swift]-类的构造函数

1:两种基本的构造函数 01-自定义构造函数:传入基本参数 02-自定义构造函数:传入一个字典 2:代码演示: 意见反馈邮件:1415429879@qq.com 欢迎你们的阅读和赞赏、谢谢!...

XJDomain
2016/08/01
4
0
Swift构造函数

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

KevinEmily
2016/03/06
62
0
Swift 4.0 基础学习总结(二)

在 Swift 4.0 基础学习总结(一)中,我们学习的Swift中的基本数据类型以及控制流,Swift简介的语法以及提供的更加适用亲民的方法让我们已经初步感受到这门语言的魅力。今天来继续学习Swift...

xx_cc
2017/12/03
0
0
C#基础知识系列五(构造函数)

前言   本节主要来学习下实例构造函数、私有构造函数和静态构造函数。   构造函数的作用:   1、当一个类在new实例化对象时,可调用构造函数进行初始化对象。   2、不带参数的构造函...

aehyok
2014/01/13
0
0
《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则

原创文章,欢迎转载。转载请注明:关东升的博客 在构造函数中可以使用构造函数代理帮助完成部分构造工作。类构造函数代理分为横向代理和向上代理,横向代理只能在发生在同一类内部,这种构造...

智捷课堂
2015/11/30
26
0
C++中构造函数与析构函数的调用顺序

构造函数、析构函数与拷贝构造函数介绍 2.1构造函数 构造函数不能有返回值 缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 创建一...

SibylY
2013/09/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NNS拍卖合约

前言 关于NNS的介绍,这里就不多做描述,相关的信息可以查看NNS的白皮书http://doc.neons.name/zh_CN/latest/nns_background.html。 首先nns中使用的竞价货币是sgas,关于sgas介绍可以戳htt...

红烧飞鱼
24分钟前
0
0
从MySQL全备文件中恢复单个库或者单个表

从MySQL全备文件中恢复单个库或者单个表 提取建库语句 sed -n '/^-- Current Database: db_cms/,/^-- Current Database: `/p' backup.sql > db_cms.sql & 提取ddl sed -e'/./{H;$!d;}' -e ......

yysue
56分钟前
0
0
Java IO类库之管道流PipeInputStream与PipeOutputStream

一、java管道流介绍 在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedOutputStream和管道输入流PipedInputStream完成线程间通信。多线程管道通信的...

老韭菜
今天
0
0
用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
今天
0
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
今天
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0
Mybaties入门介绍

Mybaties和Hibernate是我们在Java开发中应用的比较多的两个ORM框架。当然,目前Mybaties正在慢慢取代Hibernate,这是因为相比较Hibernate而言Mybaties性能更好,响应更快,更加灵活。我们在开...

王子城
昨天
2
0
编程学习笔记之python深入之装饰器案例及说明文档[图]

编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰...

原创小博客
昨天
0
0
流利阅读笔记33-20180722待学习

黑暗中的生物:利用奇技淫巧快活生存 Daniel 2018-07-22 1.今日导读 如果让你在伸手不见五指的黑暗当中生存,你能熬过几天呢?而大千世界,无奇不有。在很多你不知道的角落,有些生物在完全黑...

aibinxiao
昨天
6
0
Hystrix降级逻辑中如何获取触发的异常

通过之前Spring Cloud系列教程中的《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》一文,我们已经知道如何通过Hystrix来保护自己的服务不被外部依赖方拖垮的情况。但是实际...

程序猿DD
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部