这个块在 Swift - Alamofire 中是啥意思?

Posted

技术标签:

【中文标题】这个块在 Swift - Alamofire 中是啥意思?【英文标题】:What does this block mean in Swift - Alamofire?这个块在 Swift - Alamofire 中是什么意思? 【发布时间】:2015-07-12 06:14:36 【问题描述】:

这是 Alamofire/Manager.swift 中的代码块:

它位于名为“public class Manager”的类中
public static let sharedInstance: Manager = 
    let configuration: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.HTTPAdditionalHeaders = Manager.defaultHTTPHeaders

    return Manager(configuration: configuration)
()

显然,这是“让某物等于闭包”,但我不明白行尾的“()”是什么意思?

推迟代码的执行?如何? (在我看来,执行不会因为它有“()”而被推迟?我想知道为什么这不会导致内存圈的存在?它返回 Manger 本身,返回的新实例也将做同样的事情,返回一个新的自我......

为什么不用一个关键词“懒惰”?

我有一种奇怪的感觉,我在其他地方也出现过这种用法。我现在正在学习 Swift 60 天。我是快还是慢?如何也成为 ios 开发者?(我的意思是如何成为真正的开发者,而不是注册程序)

现在我有点困惑并阅读了我能得到的所有源代码。有时我觉得官方文档和 Xcode 很烂,我不知道如何从头开始阅读源代码。有什么提示和建议吗?

【问题讨论】:

Re:学习 iOS 开发 - 斯坦福大学有免费(和高质量)视频课程供您学习 Swift 和 Objective C @IslamQ。我已经上过#Stanford 的课程,我觉得它相对来说太简单了。另一方面,我遇到了无数的问题(我学习 python 时没有问题),包括如何为应用程序设计图标,以及为太吧项目。 & 自定义视图和动画。 2 如何阅读 Xcode 6.3 中不存在的旧 API 的官方指南。只是无奈。 那你有没有去raywenderlich.com和其他教程网站学习不同的技巧?另外,我发现真正有用的是实际创建一个应用程序...您将在旅途中了解与您的需求相关的任何内容... @IslamQ。谢谢你的建议。我会试试的。只是发现我可能还需要第二个显示器......开发一个应用程序。 【参考方案1】:

这将使用闭包的结果初始化sharedInstance(如果没有最后的括号,它只会将其初始化为闭包本身)这是一种标准语法,用于使用对于简单表达式而言过于复杂的初始化程序来初始化变量。在此需要多个语句,以便可以初始化 HTTPAdditionalHeaders

【讨论】:

所以 const sharedInstance 将是一个新的 Manager 类的实例。没问题。 但是新的 Manger 实例也会有这个名为 sharedInstance 的属性,它将是一个新的 Manger 实例。这个实例也会有 sharedInstance,然后它会有一个新的实例。这不会结束。? 谢谢你。 ..我想我应该先尝试阅读所有源代码文件并使用调试工具。 变量声明前使用的“static”关键字将变量标记为类(或类型)变量而不是实例变量。因此,类或类型的所有实例共享它的一个副本。【参考方案2】:

好吧,我犯了一个错误。诀窍在于sharedInstance使用了关键字“static”这个很常见,但是在我最熟悉的python中,不要使用这个关键字。

根据官方指南:

“您还可以定义属于该类型本身的属性,而不是该类型的任何一个实例。无论您创建多少该类型的实例,这些属性都只会有一个副本。这些类型的属性称为类型属性。”

Apple Inc. “Swift 编程语言”。电子书。 https://itun.es/cn/jEUH0.l

【讨论】:

【参考方案3】:

答案是会话名称“使用闭包或函数设置默认属性值”:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-ID231

【讨论】:

以上是关于这个块在 Swift - Alamofire 中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中使用 Alamofire 4 解析这个 json?

Alamofire - 从 Swift 2 转换为 Swift 3 时出错

Alamofire 自定义响应从 Alamofire v1.3 迁移到 3.0(和 Swift 2 语法)

发送 Alamofire JSON 数组 Swift

Swift 3 中的 Alamofire?

Alamofire swift 库版本 4.4 未安装在 swift 3.0.2 项目中