Swift "Immediately Invoked Function Expression"(IIFE) 的使用场景和代码演示

17 min read

Swift 没有官方的 IIFE 支持,但是可以通过使用闭包来实现类似的功能。

使用闭包作为 IIFE 有以下几种场景:

  1. 变量私有化

通过 IIFE,可以将需要私有化的变量封装在一个函数作用域中,从而避免对外部变量的污染。

let result = { () -> Int in
    let x = 1
    let y = 2
    return x + y
}()
  1. 防止变量名冲突

JavaScript 中经常使用 IIFE 防止变量名污染。在 Swift 中同样适用,通过 IIFE 可以将变量封装在一个函数作用域中,避免与全局作用域的变量名冲突。

let result = { () -> Int in
    let x = 1
    let y = 2
    return x + y
}()

print(result) // 3
  1. 模块化开发

在 JavaScript 中,IIFE 经常被用于模块化开发,封装某些功能或数据结构。在 Swift 中同样适用。

let myModule = { () -> () in
    // Some private implementation code here

    // Return a dictionary
    return [
        "foo": "bar",
        "baz": "qux"
    ]
}()

print(myModule["foo"]!) // bar

在上述代码中,myModule 是一个包含一些私有实现和返回一个包含键值对的字典的闭包。执行后,myModule 的值被存储,并且可以通过调用该字典中的键值对来访问其中的数据。