2017-02-10 11 views
0

このメソッドはフラグを取り、UIを更新するこのメソッドを持っています。Swiftデフォルトのパラメータはキャッシュされた値を使用します

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

デフォルトパラメータとして使用されるブール値は、実際には到達可能性の到達可能です。

ネットワーク接続がオフになると、フラグの期待値はfalseですが、常にtrueです。 if Reachability.reachableのようなデフォルトのパラメータを使わずに直接チェックすると、アラートが表示されます。

動的に変更されるデフォルトパラメータを使用するのは間違っていますか?

答えて

0

私はいくつかの公式の文書を探していますが、私はできません。素早いデフォルトのパラメータ値は動的に静的にバインドされません。この記事を参照してください

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

EDIT:

まあ私が間違っている、それは動的であるように見えます。あなたはこの遊び場でそれをテストすることができます。

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

import Cocoa 

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

myFunction() 
sleep(3) 
myFunction() 

あなたは3秒待った後、日付の変更が表示されますので、それが2回目の呼び出しで新しいDateを作っている...多分あなたの到達可能性のコードにバグがありますか?

関連する問題