美文网首页
swift-29构造函数(KVC)

swift-29构造函数(KVC)

作者: sunmumu1222 | 来源:发表于2017-08-30 10:23 被阅读16次

我以前做的swift笔记, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以当做自己的一份文档.

image.png
override func viewDidLoad() {
        super.viewDidLoad()

//        let p = Person(dict: ["name": "小花" as AnyObject, "age": 100 as AnyObject, "title": "标题" as AnyObject])
//        print("\(p.name) \(p.age) \(p.title)")
        let s = Student(dict: ["name": "小红" as AnyObject, "age": "18" as AnyObject, "title": "标题" as AnyObject, "no": "001" as AnyObject, "xxx": "haah" as AnyObject])
        print("\(s.name) \(s.age) \(s.title) \(s.no))")
        
    }
image.png
//
//  Person.swift
//  13构造函数(KVC)

import UIKit
/**
 1定义模型属性的时候 如果是对象 通常是可选的
    -在需要的时候创建
    -避免写构造函数 可以简化代码
 2如果是基本数据类型 不能设置成可选的 而且要设置初始值 否则 KVC会奔溃!
 3如果需要使用KVC设置数值 属性不能是 private , 在swift中, private外部是完全不让访问的
 4使用KVC方法之前 应该调用 super.init 保证对象实例化完成
 5重写 setValue(_ value: Any?, forUndefinedKey key: String) 方法, 防止字典的key 不存在,导致的奔溃
 例子:
 YYModel 是oc写的, 使用YYModel的注意点就为以上几点
 父类重载了构造函数 使用字典转模型
 子类添加属性, 不实现构造函数, 直接基础父类的构造函数, 实现字典转模型
 */
/**
 继承:
 子类继承父类的所有方法和属性, 可以直接使用父类的方法和属性
 */

class Person: NSObject {
    //name 属性是可选的 在oc中 很多属性都是需要的手创建的
    // 例如 vc.view / tableViewCell.textLabel
    // 因为在手机开发 内存很宝贵 有些属性并不是一定需要分配空间的
    // 延迟加载 在需要的时候再创建
    var name: String?
    
    //给基本数据类型初始化
    //使用KVC 会提示无法找到 age 的KEY
    // -原因: Int 是一个基本数据类型的结构体 oc中没有 oc中只有基本数据类型!
    //var age: Int? 会奔溃
    var age: Int = 0
    
    //private var title: String? 会奔溃
    //如果是private 修饰属性 使用KVC 设置值的时候 同样无法设置
    //如果设置成 private 属性/方法 禁止外部访问的
    // oc中 东西隐藏在.m 代码编写敲不出来, 但实际使用runtime 实际可以访问到
    // 但swift中 private 修饰, 就真的外部完全访问不到
    var title: String?
    
    //重载构造函数 使用字典为本类设置初始值
    init(dict: [String: AnyObject]) {
        super.init()
        setValuesForKeys(dict)
        
        // Use of 'self' in method call 'setValuesForKeys' before super.init initializes self
        // 使用 self的方法 'setValuesForKeys' **之前** 应该调用 super.init
        //kvc的方法 是oc的方法 **在运行时给对象发送消息**
        // **要求对象已经实例化完成
        
//        super.init()
    }
    
    //重写父类方法
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
        //没有调用 super  将父类的代码完全覆盖 不会奔溃!
    }

}
image.png

相关文章

  • swift-29构造函数(KVC)

    我以前做的swift笔记, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以当做自己...

  • swift kvc 构造函数

    kvc 是oc特有 ,KVC 本质上是在运行时,直接调用程序会崩溃 介绍 kvc 构造函数 kvc构造函数的作用是...

  • 手把手带你学习Swift3.0(23):构造函数

    1.类的构造函数 2.类的构造函数KVC

  • Swift基础 - KVC/遍历构造方法

    五.KVC构造方法: KVC构造函数,利用运行时的机制,在运行的时候,给对象动态调用setValue forKey...

  • swift中累的构造函数

    类的构造函数 使用KVC调用构造函数 需要注意事项1.必须继承自NSObject2.必须在构造函数中,先调用sup...

  • Swift 基础

    继承自NSObject 对象的构造函数 自定义构造函数 kvc UIKit的控件的封装实例 防止闭包导致的循环...

  • Swift学习笔记(二)

    这篇文章主要的知识点有: ? 和 !的使用 函数的使用 闭包的基本使用 构造函数&析构函数 在构造函数中使用KVC...

  • Swift 基础之KVC 字典转模型构造函数

    KVC 字典转模型构造函数 以上代码编译就会报错! 原因:KVC 是 OC 特有的,KVC 本质上是在运行时,动态...

  • Swift-构造函数,构造函数与KVC

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

  • Swift之KVC 字典转模型

    相关资料 KVC 字典转模型构造函数 建模 plist文件 应用demo DEMO https://github....

网友评论

      本文标题:swift-29构造函数(KVC)

      本文链接:https://www.haomeiwen.com/subject/msmzdxtx.html