Swift

2014-11-28 12 views
12

'da isteğe bağlı bir bloğu veya bir işlevi kapatmak için geçiş yapma İsteğe bağlı bir bloğu Swift'deki bir işleve iletmek için doğru sözdizimi nedir?Swift

+0

olası bir kopyası [Nasıl hızlıca isteğe bağlı bir kapatma yapar?] (Http://stackoverflow.com/questions/24395853/how-does-one-make-an-optional-closure- in-swift) –

+0

Aynı bilgiyi kapsar, ancak bir Objective-C geliştiricisi, yanıtı "kapatma" yerine "blok" aramanın sonucunda (benim yapmadığım gibi) bulamaz. Kapatma elbette doğru Swift terminolojisidir. –

cevap

21

Objective-C blok sözdizimi olarak hatırlamak zor olmasa da, açıktan çok uzaktır. notConnected parametre bu örnekte isteğe bağlıdır:

func whenConnected(block: Void -> Void, notConnected: ((Void) -> Void)?, showErrorMessage: Bool) -> Void { 

     let connected = Reachability.isConnectedToNetwork() 

     if connected { 
      block() 
     } else { 
      notConnected?() 
     } 

     if showErrorMessage { 
      // your error handling // 
     } 
    } 
+0

İyi nokta - teşekkürler. Cevap buna göre güncellendi. –

10

Ben (aşağıdaki bağlantıya bakınız) örneğini bulundu ve benim projede typealias kullanmak için güncellenmiştir.

Swift 3:

import Foundation 

typealias CompletionBlock = (NSError?) -> Void 
var completionBlock: CompletionBlock? 

// a function declaration w/ optional closure param and default value 
func doSomething(completion: CompletionBlock? = nil) { 
    // assign to the property, to call back out of this function's scope 
    completionBlock = completion 
    // ... 
    // optional closure callback 
    completionBlock?(nil) 
    // ... 
} 

func doSomethingElse() { 
    // 1. pass optional (nil) closure to a function 
    doSomething() 

    // 2. pass optional (non-nil) closure to a function 
    doSomething(completion: { (error) -> Void in 
     print("error: \(error)") 
    }) 
} 

Kaynak: Optional trailing closures in Swift

NOT: completion isteğe bağlı kapanma olarak ilan edildiğinden, her zaman kaçar. Bunun hakkında daha fazla bilgi için: Optional Non-Escaping Closures