2015-09-28 3 views
0

Я немного изо всех сил, чтобы построить вызов в SWIFT для этой функцииSwift синтаксис - укупорочные

func addressFromLocation(location:CLLocation!, completionClosure:((NSDictionary?)->())){ 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in 
     var geoCoder = CLGeocoder() 
     geoCoder.reverseGeocodeLocation(location, completionHandler: { (placeMarks, error) -> Void in 
      if let places = placeMarks { 
       var marks = places[0] as! CLPlacemark 
       completionClosure(marks.addressDictionary) 
      }else { 
       completionClosure(nil) 
      } 

     }) 
    }) 
} 

Может кто-нибудь помочь?

+0

вы можете дать немного больше объяснений о том, что вы пытаетесь построить.? – arthankamal

+0

@arthankamal Я хочу назвать эту функцию, чтобы построить вызов в соответствии с синтаксисом SWIFT, который я не знаю, как это сделать. – Vanya

+0

http://stackoverflow.com/a/27750189/1866077, надеюсь, что это поможет – arthankamal

ответ

0

Во-первых, вы можете удалить ненужные скобки из типа completionClosure параметра:

func addressFromLocation(location: CLLocation!, completionClosure: NSDictionary? ->()){ 
    //... 
} 

И вы можете вызвать эту функцию следующим образом:

addressFromLocation(location, completionClosure: { 
    dict in 
    // your code 
}) 

Или еще проще, потому что если закрытие является окончательным аргументом функции то вы можете использовать синтаксис закрывающего закрытия:

addressFromLocation(location) { 
    dict in 
    // your code 
} 

И если вы не нуждаются в имени параметра dict, то вы можете обратиться параметр по номеру:

addressFromLocation(location) { 
    print($0) 
} 
+0

Да, вы правы с этими круглыми скобками. И спасибо, отлично работает. – Vanya

Смежные вопросы