2016-08-30 14 views
7

私はこれと同様の機能を持っているため、同じ値を設定する:複数の迅速なパラメータ

func stamp(documentURL: NSURL, saveURL: NSURL) { 
     ...} 

私は、彼らがしたい場合は、誰かがこれらのパラメータの両方を設定することを可能にすることができるようにしたいと思います。しかし、最初のパラメータだけを設定した場合は、saveURL = documentURLを使用します。関数宣言でこれを行う方法はありますか?

スウィフト2.3、3では

答えて

1

トンでこれを行う方法はありません彼は関数宣言自体を機能させますが、デフォルトのnilnil coalescing operatorのオプションパラメータを使用することで、関数本体の1行に記述することができます。

func stamp(documentURL: NSURL, saveURL: NSURL? = nil) { 
    let saveURL = saveURL ?? documentURL 

    // ... 
} 

このようにそれを行うことの利点は、saveURLは後で力アンラップ演算子を使用することからあなたを節約し、関数本体内の非オプションであるということです。

1

SWIFT 2

func stamp(documentURL: NSURL, var saveURL: NSURL? = nil) { 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 

SWIFT 3

func stamp(documentURL: NSURL, saveURL: NSURL? = nil) { 
    var saveURL = saveURL 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 
+0

ちょうど同じ名前のローカル変数を作成スウィフト3で削除されるようにvar'はスウィフト関数で推奨されて '使用。 – ozgur

+0

@ozgur thanksスワイフ3のセーフバージョン –

+0

を追加しました。関数宣言の中で行う方法はないと思いますか? –

3

func stamp(documentURL: NSURL, saveURL: NSURL?) { 
    var saveURL = saveURL 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 
+0

はありません。それはSwift 2.3にもあてはまります。 – ozgur

+0

ありがとうございました@ozgur – pedrouan

+0

私は体内にコードなしで関数宣言でこれを行う方法はないと思いますか? –

関連する問題