Swift3.0-closure的@autoclosure和@escaping

(一)autoclosure:

  autoclosure可以把一句话自动的封装成一个闭包。但是不支持带有输入参数的写法

    func autoclosure(_ check: @autoclosure ()->Bool) {

        if check() {

            print("true")
        }
    }

  此时调用的时候就可以直接写成:

autoclosure(2>3)

(二)@escaping:

  在以前版本闭包的使用时不用加@escaping的。当前版本,如果闭包没有回调参数返回值,是不需要@escaping的。但是如果闭包传递了参数。就会出现一种假设。那就是参数中block的内容会在函数执行返回前就完成。也就是说对于block的调用时同步的。

  简单的说 就是如果这个闭包是在这个函数结束前被调用,就是noescape。

  闭包在函数执行完成后才调用,调用的地方超过了函数的范围,就是逃逸闭包。

  网络请求后结束的回调就是逃逸的。因为发起请求后过一段时间闭包执行。

  在swift3.0中所有闭包都是默认非逃逸的,无需@noescape。如果是逃逸的就@escaping表示。

  延迟操作,网络加载等都需要@escaping。

  

    func clorse(completion:@escaping (_ json: [String])->()) {

        let workingQueue = DispatchQueue(label: "workingQueue")

        workingQueue.async {

            // 延迟操作
            print("努力工作")

            Thread.sleep(forTimeInterval: 2.0)

            let json = ["ac","mym"]

            DispatchQueue.main.async {

                print("结束工作")

                // 主线程更新 回调
                completion(json)
            }

        }

    }
时间: 2024-11-03 19:39:40

Swift3.0-closure的@autoclosure和@escaping的相关文章

Swift3.0 函数闭包与OC Block

刚接触Swift,如有不对的点,欢迎指正.转载请说明出处 Swift中定义一个基本函数 //定义一个函数,接收一个字符串,返回一个String类型的值 func test(name:String) -> String { return ("输出了\(name)") } //通用形式 func name(parameters) -> return type { function body } Swift 中基本的闭包函数与OC中Block的相似点 带参闭包 //OC中Bloc

突然兴起复习一下Swift3.0

/// 参考Swift3.0.1文档 /// 摘录来自: Apple Inc. "The Swift Programming Language (Swift 3.0.1)". iBooks. import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() aSwiftTour() } func aSwiftTour(){ //Swift中的输出

(细节控)swift3.0与融云IMKIT开发问题(一部分) override func onSelectedTableRow Method does not override any method from its superclass

原官网文档方案如下,在swift3.0的情况下出现 override func onSelectedTableRow  Method does not override any method from its superclass 这是因为swift3.0 有很多变更,需要更换下onSelectedTableRow参数. //重写RCConversationListViewController的onSelectedTableRow事件 override func onSelectedTableR

Swift2.3 --> Swift3.0 的变化

Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcode帮我们把Swift2.3的代码转换为Swift3.0. 手动调出Xcode自动转换Swift2.3 到 Swift3.0 弹出语言版本选择界面,选择Covert to Swift3,Next:  进入选择模块界面: 选择模块界面 建议只选择自己创建的模块,第三方框架的模块最好不要使用Xco

使用 swift3.0高仿新浪微博

项目地址:https://github.com/SummerHH/swift3.0WeBo 使用 swift3.0 高仿微博,目前以实现的功能有,添加访客视图,用户信息授权,首页数据展示(支持正文中连接匹配,@匹配)支持照片浏览,大图浏览,保存图片到相册本地, 实现发布微博,发微博添加照片,发送Emoticon表情等功能, 先看下项目整体框架 项目使用 MVC 框架,但是在写的过程中也用到了 MVVM设计模式

使用的一些支持swift3.0的开源库

#解决键盘弹起遮挡工具 pod 'IQKeyboardManagerSwift', '~>4.0.6' #多种类型弹出框 pod 'SCLAlertView', :git => 'https://github.com/vikmeup/SCLAlertView-Swift' # Alamofire 网络库 (4.1.0最低支持iOS8.0,4.0最低支持iOS9.0) pod 'Alamofire', '~> 4.0' # swift解析json库 pod 'SwiftyJSON', :g

swift3.0:CoreData的使用

一.介绍 CoreData不像slqite3那样编写代码繁琐,同时避免了使用了SQL语句的麻烦,也可以回避使用C语言的语法,降低了iOS开发的技术门槛. CoreData可降低开发成本,提高代码质量.它是一个完全面向对象的API,能够合理管理内存,负责在数据库中存储数据,底层也是由类似 于SQL的技术实现的.CoreData是持久化存储的最佳方式,数据最终的存储类型可以是SQLite数据库.XML.二进制.内存或自定义数据类型 它和SQLite的区别是:只能取出整个实体记录,然后分离,之后才能得

swift3.0 coredata 的使用

//swift3.0在语法上有很大的改变,以简单的增删改查为例,如下: //User类如下: import Foundation import CoreData extension User { @nonobjc public class func fetchRequest() -> NSFetchRequest<User> { return NSFetchRequest<User>(entityName: "User"); } @NSManaged pu

iOS 日期处理 (Swift3.0 NSDate)

处理日期的常见情景 NSDate -> String & String -> NSDate 日期比较 日期计算(基于参考日期 +/- 一定时间) 计算日期间的差异 拆解NSDate对象(分解成year/month/day/hour/minute/second 等) NSDate相关类 NSDate DateFormatter DateComponents DateComponentFormatter Calendar Date structure: Swift3.0中引入了Date s