Swift的实用点记录

从事iOS开发已经有俩年了,对于OC的学习自以为到了瓶颈了,现在正在摸索新的出路,于是RxSwift入眼帘。但是这个框架的学习需要有swift的基础,所以看了一些关于swift中级教程的资料和视频,把自己认为的难点记录下来,以供自己以后的复习。

外部参数和内部参数
func sum (num1 x:Int , num2 y:Int)
{
return x + y
}
1.外部参数 num1,num2 是供外部调用的参考的,保证语义更加清晰
2.内部参数 x ,y  是供内部函数使用的
闭包
  • 闭包的返回值 用来接收闭包执行的结果,然后继续后续代码
  • 闭包的参数 用来将内容传递给闭包内部
override func viewDidLoad() {
        super.viewDidLoad()
        let f = CGRect(x:0 , y:100, width: kScreenW, height: 50)
        let s = scroll(frame: f, count: { () -> Int in
            return 10
        }) { (indexs) -> UILabel in
            let l = UILabel()
            l.text = "标签/(index)"
            l.font = UIFont.systemFont(ofSize: 18.0)
            l.sizeToFit()
            l.font = UIFont.systemFont(ofSize: 15.0)
            return l;
        }
        view .addSubview(s)
    }
func scroll(frame:CGRect,count:()->Int,indexL:(_ indexs:Int)->UILabel ) -> UIScrollView{
        let s  = UIScrollView(frame: frame)
        s.backgroundColor = UIColor.red
        let c = count()
        let   margin : CGFloat = 10
        var x : CGFloat = margin
        for i  in 0..
构造函数以及作用
  • Swift 支持重载 ,函数名相同,参数的数量和类型不同
  • 分配空间
  • convenience 声明的遍历构造函数 才可以返回nil,并且只有他可以调用self.init()
  • func 声明的指定构造函数不能返回nil
class HMLabelSrollViiew: UIScrollView {
    init(frame: CGRect,count:()->Int,indexL:(_ indexs:Int)->UILabel) {
        super.init(frame: frame)
        backgroundColor = UIColor.red
        let c = count()
        let   margin : CGFloat = 10
        var x : CGFloat = margin
        for i  in 0..
 override func viewDidLoad() {
        super.viewDidLoad()
        let f = CGRect(x:0 , y:100, width: kScreenW, height: 50)
         let s =  HMLabelSrollViiew(frame: f, count: { () -> Int in
            return 12;
        }) { (index) -> UILabel in
            let l = UILabel()
            l.text = "标签/(index)"
            l.font = UIFont.systemFont(ofSize: 18.0)
            l.sizeToFit()
            l.font = UIFont.systemFont(ofSize: 15.0)
            return l;
        }  
    }
懒加载

懒加载其实就是一个闭包,闭包只执行一次
lazy的用法 没有lazy来修饰 控制器一旦创建 就会被执行

lazy var dataList:[String] =
{
    return ["张三","李四"]
}()
throw(抛出异常)

JSON的本质就是一个特殊的格式的字符串
反序列化throw会抛出异常
使用try!强行解包如果JSON数据格式不对会出现异常

        let json = "{\"name\" : \"laowang\"}"
        let jsonData = json.data(using: .utf8)!
        
        do{
      _ =  try JSONSerialization.data(withJSONObject: jsonData,
     options: [])
        }catch
        {
            print(error)
        }
guard let/ if let的使用

使用同名的变量接受值,在后续使用的都是非空值,不需要解包

func demo(name:String? , age:int?)
{
guard let name = name, age = age
    {
       // 值为非空值
    }
}

你可能感兴趣的:(Swift的实用点记录)