2016-07-18 4 views
2

인수가있는 함수를 호출하려면 Swift 3.0에 각 매개 변수를 함께 써야합니다. 그러나 일단 형식 주석을 사용하여 상수에 함수를 할당하면 각 매개 변수를 쓸 필요가 없습니다. 왜? 당신은 "속기"를 수행 할 때신속한 기능적 주석 annotation

func foo(base : Int) { 
    print ("param = \(base)") 
} 

// Case 1 
let s : (Int) ->() = foo 

s(5) // SUCCESS! 
s(base:5) // Error! 

// Case 2 
let k : (base: Int) ->() = foo 

k(5) // Error! 
k(base: 5) // SUCCESS! 

// Case 3 
let t = foo 

t(5) // Error! 
t(base: 5) // SUCCESS! 
+1

'let s : (base : Int) ->() = foo' 또는 단순히'let s = foo'를 사용하여 클로저 매개 변수 이름을 지정할 수 있습니다. –

+4

기능 유형에 대한 매개 변수 이름을 제공하는 것이 향후 Swift 3 버전에서는 허용되지 않습니다. [이 진화 제안서] (https://github.com/apple/swift-evolution/blob/master/proposals/0111- remove-arg-label-type-significance.md). – Hamish

답변

-2

, 당신은 유형 지능의 입력 매개 변수없이 반환 값을 갖는 서명 요구 사항을 충족하는 기능으로, 일반적인 유형의에 "s"를 만들고 있습니다.

foo를 해당 상수에 할당하면 유형 요구 사항을 충족시키고 foo는 이제 s 내에 "중첩"됩니다. 당신이 더 일반적인 유형의 변수에보다 구체적인 객체를 할당 할 수 있습니다 (슈퍼 클래스 변수 예를 들어, 서브 클래스 개체,하지만 우리는 여기에 수업에 대해 이야기하지 않을), 그러나 때문에 어쩌면

...

1

그 반대도 마찬가지입니다.

(base: Int) ->()은 일반적인 (Int) ->() 함수의보다 구체적인 경우입니다. 따라서 (base: Int) ->()(Int) ->() 함수이지만 (Int) ->() 함수는 (base: Int) ->() 함수가 아닙니다.

나중에 만든 변수를 사용하면 Swift는 해당 변수를 해당 유형에 따라 처리합니다. (base: Int) ->()이면 인수 이름이 필요하며 그렇지 않으면 필요하지 않습니다.

따라서 첫 번째 경우에는 변수를 명시 적으로 (Int) ->()으로 선언하고 적절하게 사용하십시오. 스위프트는이 라인에 어떤 가정을하지 않습니다

s(5) // SUCCESS! 
s(base:5) // Error! 

그것은 단지 변수가 유형 (Int) ->()을 가지고 있음을 알고있다. 예를 들어 (whatever: Int) ->()과 같은 다른 (Int) ->() 함수가 될 수 있습니다.

두 번째 경우 변수는 명시 적으로 (base: Int) ->()으로 생성되므로 사용하려면 이름을 지정해야합니다.

세 번째 경우 변수는 으로 생성되었으며 (base: Int) ->() (자동으로 유형을 추론 함)입니다.

0
{ 
    let location : NSString = Txtsrch.text! as NSString 
    let geocoder : CLGeocoder = CLGeocoder() 

    geocoder.geocodeAddressString(location as String, completionHandler: {(placemarks, error) -> Void in 
     if((error) != nil){ 
      print("Error", error) 

      let alert = UIAlertController(title: "Search Invelid", message: "Please Enter Valid Place", preferredStyle: UIAlertControllerStyle.alert) 
      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 
      self.present(alert, animated: true, completion: nil) 

     } 
     else 
     { 


      if let placemark = placemarks?.first { 
       let coordinates : CLLocationCoordinate2D = placemark.location!.coordinate 
      } 
      if (placemarks!.count > 0) { 
       print(placemarks![0]) 
       let topResult : CLPlacemark = placemarks![0] 
       let placemark: MKPlacemark = MKPlacemark(placemark: topResult); 
       self.lat = (placemark.location?.coordinate.latitude)! 
       self.lng = (placemark.location?.coordinate.longitude)! 
       print("coordinate=",placemark.location?.coordinate.latitude) 
       var region: MKCoordinateRegion = self.mapli!.region; 
       region.center = (placemark.location?.coordinate)!; 

       region.span.longitudeDelta /= 8.0; 
       region.span.latitudeDelta /= 8.0; 
       self.mapli!.setRegion(region, animated: true); 
       self.mapli!.addAnnotation(placemark); 
       self.bool = true 

      } 
     } 

    }) 


}