实现 debugOnly 函数

2020-05-25  本文已影响0人  NapoleonY

概述

一般实现 debug 函数是通过compile flag (也就是编译宏)去实现的

func debug(_ action: () -> Void) {
    #if DEBUG
    action()
    #endif
}

但这种方式需要修改工程配置
今天看别人博客有如下实现方式

assert

func debugOnly(_ body: () -> Void) {
    assert({ body(); return true }())
}

assert声明如下

func assert(
    _ condition: @autoclosure () -> Bool,
    _ message: @autoclosure () -> String = default,
    file: StaticString = #file,
    line: UInt = #line
)

The condition to test. condition is only evaluated in playgrounds and -Onone builds(the default for Xcode's Debug configuration).

condition 因为 @autoclosure 的标记会把传入的值自动装到闭包里,然后只有在 debug 模式下才会执行并且求值,通过这种方式就可以很完美地实现一个 debugOnly 函数

参考

  1. 巧妙实现 debugOnly 函数
上一篇 下一篇

猜你喜欢

热点阅读