首页 » iOS编程基础:Swift、Xcode和Cocoa入门指南 » iOS编程基础:Swift、Xcode和Cocoa入门指南全文在线阅读

《iOS编程基础:Swift、Xcode和Cocoa入门指南》2.12 定义与调用

关灯直达底部

Swift中非常常见的一种模式就是定义一个匿名函数然后调用它,如以下代码所示:


{    // ... code goes here}  

注意花括号后面的圆括号。花括号定义了一个匿名函数体;圆括号则调用了这个匿名函数。

为什么会这么做呢?如果想要运行一些代码,直接运行就行了;为什么还要将其嵌入更深的层次作为函数体,反过来再运行它呢?

首先,匿名函数是降低代码的命令性,增强函数性的一种行之有效的方式:动作在需要时才发生,而无须借助一系列的准备步骤。如下是个常见的Cocoa示例:创建并配置一个NSMutableParagraphStyle,然后在对addAttribute:value:range:的调用中使用(content是个NSMutableAttributedString)。


let para = NSMutableParagraphStylepara.headIndent = 10para.firstLineHeadIndent = 10// ... more configuration of para ...content.addAttribute(    NSParagraphStyleAttributeName,    value:para, range:NSMakeRange(0,1))  

我觉得上面的代码丑陋至极。我们只在addAttribute:value:range调用中才需要将para作为value:实参传递进去,因此在调用中创建并配置它才是更好的做法。Swift允许我们这么做,我更倾向于下面这种写法:


content.addAttribute(    NSParagraphStyleAttributeName,    value: {        let para = NSMutableParagraphStyle        para.headIndent = 10        para.firstLineHeadIndent = 10        // ... more configuration of para ...        return para    },  range:NSMakeRange(0,1))  

第3章将会进一步介绍定义与调用的使用场景。