美文网首页
Swift中的@objc、 private、 filepriva

Swift中的@objc、 private、 filepriva

作者: 下班不写程序 | 来源:发表于2020-03-25 15:24 被阅读0次
    1. @objc
    1. Swift 是静态语言, 编译的时候就知道谁调用谁了
    2. OC 是运行时语言, 是通过消息的运行循环来一层层找的
    3. 在 Swift4.0 之后 (包括4.0), 继承于 NSObject 的所有 Swift Class 不会在默认 bridge 到OC, 也就是没有告诉系统 Swift Class内容的存在, 所以就会找不到
    4. @objc的应用:
      4.1 @objc应用于函数是为了能够让函数表达为 #selector
      4.2 @objc应用于变量是为了能够让变量表达为keypath字符串,进而使用kvc功能
      4.3 @objc dynamic应用于变量是为了让变量能够使用kvo机制。

    翻译过来也就是说,

    1. 定义类似于按钮点击等需要通过发送消息来确定事件的方法是, 需要在方法前添加@objc 关键字
    2. 使用KVC字典转模型时, 在当前类的每个属性前面 添加 @objc 关键字(或者在当前类的最上方 添加 @objcMembers 关键字)
    2. private 和 fileprivate
    1. private 访问级别是最低和最严格的级别, 也就是说限制性最强
    2. private 所修饰的属性或者方法 只能在 当前类 里面进行访问, 对于不希望对外暴露的方法, 应该使用 private 关键字来修饰
    3. Swift3.0 如果 private 修饰的方法写在其类的 extension 中时, extension外则无法无访问, 若要访问需要修改成 fileprivate
    4. Swift4.0 之后 被 private 修饰的属性和方法, 只可以在该类下使用 (包括 extension 中, 因为是同类), 反之也可以
    5. 即使在同一文件夹下, 使用 private 修饰 不同类的属性和方法是不能调用的, 就算 继承 的话, 父子在同一文件下, 子类也无法调用
    6. fileprivate 修饰的话, 在同一定义的源文件(就是同一个.swift文件)中是可以相互调用的

    private 和 fileprivate 异同: private 不能在 class 以外访问, 且必须是同类中,而 fileprivate 作用域是当前文件, 可以是不同类

    .End

    相关文章

      网友评论

          本文标题:Swift中的@objc、 private、 filepriva

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