Swift减少print函数的耗费

尽管print声明不会在设备的console里打印,但它们甚至在Release版本和设备上也会执行,这些执行可能会带来一些耗费。

特别的,它的参数仍然被模拟求值。如果你的print调用只有一个参数,这里有一个变通方法。你可以通过定义自己的全局级别的print方法来重写Swift的print方法,并且使用@autoclosure修饰器推迟其参数求值,就像assert做的那样:

func print(_ item: @autoclosure () -> Any,
        separator: String = " ", terminator: String = "\n") {
            #if DEBUG
            Swift.print(item(), separator:separator, terminator: terminator)
            #endif
}

当你调用print(myExpensiveFunction())时,这个定制print方法被调用。这意味着在闭包中包裹的myExpensiveFunction()方法不会被立即求值。

如果你只在Swift的Debug配置标志中定义了-DDEBUG,那么在Release配置下构建的app中,myExpensiveFunction()将永远不会被求值,因为item()不会被调用。

你可能感兴趣的:(iOS开发小干货,iOS开发之旅)