2016-08-30 20 views
7

Mam funkcję podobną do tej:ustawienie tej samej wartości dla wielu parametrów szybkich

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

Chciałbym, aby móc pozwolić komuś ustawić oba te parametry, jeśli chcą. Ale jeśli ustawiają tylko pierwszy parametr, chciałbym saveURL = documentURL. Czy jest jakiś sposób to zrobić w deklaracji funkcji?

Odpowiedz

1

Nie ma sposobu, aby to zrobić w t sama deklaracja funkcji, ale można to zrobić w jednym wierszu treści funkcji, używając opcjonalnego parametru o wartości domyślnej: nil i nil coalescing operator.

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

    // ... 
} 

Zaletą robi to w ten sposób, że saveURL nie jest opcjonalne w ciele funkcji, oszczędzając cię od konieczności użycia operatora siła rozpakować później.

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

Używanie 'var' jest odradzane w funkcjach Swift, ponieważ zostanie usunięte w Swift 3. Po prostu utwórz zmienną lokalną o tej samej nazwie. – ozgur

+0

@ozgur dzięki I updated dodanie wersji 3 bezpiecznej swift –

+0

Tak, myślę, że nie ma sposobu zrobić w deklaracji funkcji? –

3

w Swift 2.3, 3:

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

Dotyczy to również Swift 2.3. – ozgur

+0

Dziękuję @ozgur – pedrouan

+0

Chyba nie ma sposobu, aby to zrobić w deklaracji funkcji bez kodu w treści? –

Powiązane problemy