Swift Default参数使用缓存值

时间:2017-02-10 05:27:10

标签: swift

我有这个方法,它接受一个标志,并根据它更新UI。

func foo(flag: Bool = Reachability.isReachable) {
    if (flag) {
        // Show an alert
    } else {
        // Do nothing
    }
}

使用默认参数的布尔值实际上是可达性可达。

关闭网络连接后,标记的预期值为false,但始终为true。如果我直接检查它而不使用if Reachability.reachable这样的默认参数,那么它会显示警报。

使用动态更改的默认参数是错误的吗?

1 个答案:

答案 0 :(得分:0)

我正在尝试找一些官方文档,但我不能。 Swift默认参数值是静态绑定的,不是动态绑定的。看这篇文章

https://airspeedvelocity.net/2014/06/12/default-parameters-in-swift-are-statically-bound/

编辑:

我错了,看起来很动态。你可以用这个游乐场测试它:

//: Playground - noun: a place where people can play

import Cocoa

func myFunction(date: Date = Date()) {
    print("Using date \(date)")
}

myFunction()
sleep(3)
myFunction()

等待3秒后你会看到日期发生变化,所以它在第二次通话时会发出新的Date ...也许你的可达性代码中有一个错误?