当前位置: 首页 > 面试题库 >

苹果新的编程语言Swift如何处理块和异步请求?

敖子安
2023-03-14
问题内容

参见Apple在Swift上的网站页面:https :
//developer.apple.com/swift/

Swift中是否有像Objective-C一样的块?如何创建和调用它们?

如何在Swift中执行异步请求?

快速创建与块相关的内存泄漏容易吗?如果是,您将如何避免它们?


问题答案:

(Objective-)C块的Swift等效项称为闭包。《The Swift Programming
Language》一书中有一整章关于它们的内容。

根据使用闭包的上下文,可以使用非常简洁的语法声明/使用它。例如,可以采用如下方法(success: Bool, error: NSError) - > Void调用采用签名的完成处理程序的方法:

someMethod(otherParameters: otherValues, completionHandler:{ success, error in
    if !success { NSLog("I am a leaf on the wind: %@", error) }
})

在闭包本质上提供流控制的情况下,还有一种尾随的闭包语法可以很好地理解。而且,您可以在想要简短的时候删除参数名称(以牺牲可读性为代价,但是在某些明显的情况下(如下面所示)是可以的)。通常,return语句也是隐式的。

myArray.sort { $0 < $1 }
let squares = myArray.map { value in
    value * 2
}

Swift本身没有异步请求的任何内容,因此您可以使用现有的API。不过,您可以使用结尾的闭包语法:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    // do some async stuff
    NSOperationQueue.mainQueue().addOperationWithBlock {
        // do some main thread stuff stuff
    }
}

在大多数情况下,您无需担心像使用ObjC块那样使用Swift闭包创建参考循环。简而言之,捕获语义足够类似于大多数事物所需的“工作方式”,但又有足够的区别,以至于块/闭包使用的通用模式(例如,分派到后台/主线程并引用self的)。属性)不会引起循环。

循环仍然是可能的,但是有一个解决方案。这个答案已经有点长了,因此请查看文档中的“
强大的闭包参考周期”以获取完整的解释。



 类似资料:
  • C、 f.苹果在Swift上的网页:https://developer.apple.com/swift/ Swift中的块是否像Objective-c中的一样?它们是如何创建和调用的? 如何在Swift中执行异步请求? 在swift中创建与块相关的内存泄漏容易吗?如果是,您将如何避免它们?

  • 本文向大家介绍苹果公司编程语言Swift语言简介,包括了苹果公司编程语言Swift语言简介的使用技巧和注意事项,需要的朋友参考一下 Swift 是一门新的编程语言,用于编写 iOS 和 OS X 应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制。Swift 使用安全的编程模式并添加了很多新特性,这将使编程更简单,扩展性更强,也更有趣。Swift 支持 Co

  • 本文向大家介绍苹果公司推出的新编程语言Swift简介和入门教程,包括了苹果公司推出的新编程语言Swift简介和入门教程的使用技巧和注意事项,需要的朋友参考一下 一、Swift是什么? Swift是苹果于WWDC 2014发布的编程语言,这里引用The Swift Programming Language的原话: 简单的说: Swift用来写iOS和OS X程序。(估计也不会支持其它屌丝系统) Sw

  • 本文向大家介绍如果将axios异步请求同步化处理?相关面试题,主要包含被问及如果将axios异步请求同步化处理?时的应答技巧和注意事项,需要的朋友参考一下

  • 我意识到斯威夫特的书提供了一个随机数生成器的实现。在自己的程序中复制粘贴这个实现是最佳实践吗?或者有没有我们现在可以使用的库?

  • Swift 是编写程序的绝佳选择,无论是手机、电脑还是服务器,任何能跑代码的设备都是如此。它是一门集现代语言之大成,集结了苹果的工程师文化精髓以及开源社区多样化于一身的编程语言。编译器为专为性能所调优,语言专为开发所优化,二者绝不互相妥协。