美文网首页
Swift入门三(知识点)

Swift入门三(知识点)

作者: Mr姜饼 | 来源:发表于2019-12-23 17:38 被阅读0次

可选项

解包:
! :做计算 ,需要强行解包,必须有值

? :只调方法,可有可无值 ,如果没有值,则什么都不做



as! : 前面的一定有值
as?:前面的值为可选值
as :    NSString as String ; NSArray as [] ; NSDictionary as []


**if let / guard let  as?  此处一定是用as?**

懒加载

lazy var label: UILabel = UILabel()

完整的写法:(日常开发不建议这样写)

lazy var label = {()->UILabel in
  let l = UILabel()
  //可以设置label的属性
  return l
}()
懒加载Swift和OC的区别
1.swift的懒加载 只会在第一次调用的时候执行,然后将闭包的结果保存在label的属性中
2.在swift中,一定注意不要主动清理视图或者控件,因为懒加载不会再次创建

getter 和setter

class Person: NSObject {
    //一般不用
    private var _name : String?
    var name : String?{
        get{
           return _name
        }
        set{
            _name = newValue
        }
    }

只读属性(计算型函数,有返回值,不保存内容)

  //readonly只读属性
    var tiitle : String?{
        get{
            return "Mr." + (name ?? "")
        }
    }

简写
 var tiitle : String?{
            return "Mr." + (name ?? "")
    }

didset

 var tiitle : String?{
        didset{
            //已经有值了,
        }
    }

反射机制(开发团队中,为了解耦)

NSClassFromString(swift有命名空间)
performSelector
responseSelector
responsePotocol



动态获得命名空间
let ns = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""
        
let clsName = ns + "." + "ViewController"


此方法可以放入NSBundle的extension中
extension Bundle {
//利用对象函数 Bundle.main.nameSpace()
  func nameSpace() ->String{
      return infoDictionary?["CFBundleName"] as? String ?? ""
  }
//计算型函数,此次调用  Bundle.main.nameSpace
  var nameSpace:String{
     return infoDictionary?["CFBundleName"] as? String ?? ""
  }

}

相关文章

网友评论

      本文标题:Swift入门三(知识点)

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