大白话Swift入门

作者丨wangcj123

来源:

https://juejin.im/post/5e6d9e9d51882549236f95cb


  1. !?

?表示可选类型,如果申明属性或变量的话就是默认值为nil的意思,

!表示解包,对加!的在使用 前一定要做判nil处理,一般用if let 和 guard let来判断,或者用 if a != nil 来做判断

  1. 闭包的使用

闭包的表达式:

{(参数)-> 返回值 in

//代码
}


使用例子

申明为变量:

typealias Swiftblock = (String,Any) -> Void

var testBlock: Swiftblock?


使用:

if (testBlock != nil) {
    testBlock!("ddd","ffffff")
}


实现:

{ [weak self] (a,b) in
        
    print(a)
    print(b)
}

[weak self]是为了防止循环引用,(a,b)是传过来的参数


逃逸闭包:

就是闭包作为函数的参数,但是在函数结束以后才去执行这个参数的就叫逃逸闭包,在参数类型前加@escaping

逃逸闭包的使用例子

private func requestData(success:@escaping (Any) -> Void) {
    
    DispatchQueue.global().async {
    
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
            success("data") //3秒后才执行闭包success
        })
    
    }


在这个例子中闭包success作为参数,但是他在函数执行完以后过了一段时间才执行,所以他就是逃逸闭包

  1. Any 和AnyObject 类型的 付值时一定要用 as! 做类型匹配

例子:

 requestData { (data) in
        
        let str: String = data as! String //因为data是Any类型的付值给String类型的就需要做类型匹配
        print(str)
}

func requestData(success:@escaping (Any) -> Void) {
    success("data")
}


上面例子中因为参数data是Any类型的付值给String类型的时候就需要做类型匹配

  1. 申明函数参数或返回值的时候加?,否则传参数或返回返回值的时候对于可选类型的值要加!

  2. 写代理模式的时候

     protocol CCDelegate : class {
         func doSomething()
    }
    
    
    

记得在后面加上class关键字,一般加class ,

代理当作变量的时候用weak 修饰防止循环引用

 weak var  delegate: CCDelegate?


  1. if let 和 guard let 的用法,一般用来做非空判断

    var some: String?	
    
    if some != nil{
        
        print(some!)
    }
    
    //或者
    guard some != nil else{ return }
    
    print(some!)
    
    //上面的判断用 if let 和guard let 如下
    
    if let aSome = some{
        
        print(aSome)
    }
    
    guard let aSome = some else {
        return
    }
    print(aSome)
    
    
    

7.swift单例的使用

单例的一般书写格式

class SingleTest {
   static let shared = SingleTest()
   private init() {}  //一定要加private防止外部通过init直接创建实例
}


单例的使用例子:

单例类

class SingleTest {

   var aValue: NSString?
   var bValue: NSString?
   static let shared = SingleTest()
   private init() {}  //一定要加private防止外部通过init直接创建实例
}


单例的使用

SingleTest.shared.aValue = "aaa"
SingleTest.shared.bValue = "bbb"
    
print("SingleTest.shared.aValue =\(SingleTest.shared.aValue ?? "kong")")
    
//输出结果为:SingleTest.shared.aValue =aaa


一些基础的总结,有不对的地方还请留言指正

近期精彩内容推荐:  

 知乎高赞:高考700分和700万怎么选?

 Python这五个坑,怎么避开?

 贼好用的Java工具类库,GitHub星标10k+

 “新冠牌”啤酒真倒霉:60天赔了20个亿

在看点这里好文分享给更多人↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值