文档章节

构造函数- -KVC构造函数

TaciturnKnightYQ
 TaciturnKnightYQ
发布于 2015/12/04 13:23
字数 623
阅读 28
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
10
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部