zoukankan      html  css  js  c++  java
  • Swift开发常用知识点

    #pragma mark - as/类型转换
    as? / as! 需要根据前面的返回值决定 有?证明可选,可能为空:需要弱解包 没有?证明一定有值:大胆解包


    as? 前面的结果是可选的 if let / guard let 一定用as?
    as! 前面的结果一定有值
    as NSString -> String / NSArray -> [] NSDictionary -> [] 因为底层做了结构体和OC对象的桥接
    什么时候需要类型转换
    1、将父类转换为子类
    2、因为子类的属性和方法比父类多
    3、转化有风险、如果没有对应的属性和方法会崩溃
    4、参与计算的变量需要使用 "!解包" 因为参与计算 必须要保证有值

    #pragma mark - JSON序列化

    Swift开发中JSON序列化会发生异常有三种处理方式
    一:try? 解析成功就有值 失败为nil (推荐使用guard守护一下就可以了)
    guard let json = try? JSONSerialization.jsonObject(with: data!, options: [])

    二: try! 成功有值 失败崩溃(一定不要使用)
    let json2 = try! JSONSerialization.jsonObject(with: data!, options: [])

    三: 处理异常能够接收到错误信息 可以打印出来
    do {
    let json3 = try! JSONSerialization.jsonObject(with: data!, options: [])
    print(json3)
    } catch {//可以使用三方检测收集
    print(error)
    }

    #pragma mark - 定义模型

    1、定义模型的时候,如果是对象,其属性通常是可选的 (不用写构造函数,在需要的时候创建)

    --如果是基本数据类型,不能是可选的,需要定义的时候设置初始值,否则KVC会崩溃
    --private 类型的属性/方法 通过KVC不能赋值(崩溃) 是禁止外界访问的
    使用KVC的方法(本质是OC的方法,再运行时给对象发消息)之前 应该调用super.init 保证对象实例化完成


    OC开发 当字典中的键值对比模型中多的时候 需要重写 setValue:forUndefinedKey告诉系统找不到对应发键值对应该怎么办


    #pragma mark - "必选属性" 开发中极少用到

    下面的例子表示 创建对象的时候name一定有值不能为空
    override init() {
    //需要再调用super.init 方法之前为本类属性分配空间并且初始化
    self.name = "张三"

    super.init()
    }

    构造函数基础  :相当于OC中的alloc init
    重载构造函数  : 函数名称相同 参数类型和个数不同
    KVC构造函数  :对象的属性为可选/基本数据类型为必选,赋初始值/使用kvc赋值的属性不能为private
    遍历构造函数  :判断条件/convenience
    析构函数deinit :OC中的dealloc

    #pragma mark - 便利构造函数(不负责对象的创建,所以能够返回nil) 开发中使用很少,都是用第三方框架
    不能被重写,不能调用super
    为控件创建分类的时候使用的

    //1. 便利构造函数允许返回nil
    正常的构造函数一定会创建对象
    判断给定的参数是否符合条件,如果不符合条件,直接返回nil,不会创建对象,减少内存开销
    //2. 只有便利构造函数中使用 self.init() 构造当前对象
    有 convenience 关键字的构造函数用来检查条件的,不负责对象的创建
    //3. 在便利构造函数中使用当前对象的属性,一定要在self.init() 之后

    convenience init?(name: String, age: Int) {
    if age > 200 {
    return nil
    }

    //实例化当前对象
    self.init() 注意:--->是self不是super
    //执行到此处 self 才允许被访问,才能够访问到对象的属性
    self.name = name
    }

    %取余结果的正负只跟%左边的正负有关 而且可以对小数取余(OC不可以)

     

    模糊效果

    iconImageView.image = UIImage(named: "1.png")

    //效果类实例

    let blurEffect = UIBlurEffect(style: .light)

     //效果视图类的实例

    let visualEffectView = UIVisualEffectView(effect: blurEffect)

    visualEffectView.frame = CGRect(x: 0, y: 0, UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)

    //添加到背景图像(告诉系统imageView需要按照上述条件进行模糊化实现)

    imageView.addSubview(visualEffectView)

    //view.addSubview(visualEffectView) 添加到控制器的view上,所有添加到view上的视图都会被模糊化

     

     

     更多内容--> 博客导航 每周一篇哟!!!

     

     

    有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!

  • 相关阅读:
    【转】python装饰器
    【原】python异步学习
    【转】Docker学习_本地/容器文件互传(5)
    【原】容灾/容错概念理解
    【原】thinkphp实现存储session至redis
    【原】thinkphp修改Redis操作类,支持选择数据库功能及添加其他方法
    高性能CSS(三)
    Free Code Camp社区对数百计编程学习者进行的统计希望告诉你什么?
    最精简24L01程序--发送
    金日
  • 原文地址:https://www.cnblogs.com/CoderEYLee/p/Object-C-0006.html
Copyright © 2011-2022 走看看